SOUI是一套100%开源的基于DirectUI的客户端开发框架。

基于DirectUI设计的UI虽然UI呈现的效果可以很炫,但是相对于传统的win32应用程序中每个控件一个窗口句柄的形式,渲染效率是一个很重要的问题。

在SOUI系统中提供了三种武器可以用来提高渲染效率:

第一种武器:选择更高效的渲染引擎

渲染引擎提供文字,几何图形,图像的在缓存上的绘制功能。在SOUI系统中,渲染引擎是一个独立的模块,它不依赖于SOUI系统中的其它模块。

在SOUI系统中已经内置了基于skia及GDI两种框架的渲染模块(skia即在google的chrome及android中使用的渲染引擎)。直观的比较采用两种不同渲染引擎demo中动画的流畅度就可以知道基于skia的渲染引擎速度要比基于GDI的快不少。(GDI慢的原因可能是因为在GDI原生不支持alpha通道,而在实现的过程中采用alphablend模拟alpha时导致性能损失)

如果用户觉得内置的渲染引擎还是不足以满足自己的需求,还可以选择自己实现新的渲染引擎,如基于Direct2D, cairo, agg等渲染引擎。

第二种武器:绘制缓存

一个窗口中的呈现的内容很多时候都是固定的,特别是当窗口大小不变的时候。窗口中呈现的内容可能是经过复杂计算获得的(如图像的九宫格切分,拉伸等),如果每次刷新都重新计算显示渲染效率可能下降,特别是当窗口还比较大的时候。

为了解决这个问题,在SOUI系统中,我们为SWindow提供了一个cache属性,cache=“1”时,在窗口中绘制的内容会被自动缓存,下次刷新时,自动从缓存中提取数据,从而大大加速绘制过程。

第三种武器:非背景混合技术

DirectUI炫酷的效果是依赖于各窗口之间的相互混合实现的(alphablend),但是有些时候一个窗口它可能有自己固定的背景,或者前景完全覆盖窗口而不需要背景。如果这个窗口刷新非常频繁,那么每次刷新都先通知各级父窗口刷新获得背景再做混合将是很大的性能损失(如视频播放窗口)。

为了解决这个问题,在SOUI系统中(ver:1.3.0.1)为SWindow实现了一个新的属性:bkgndBlend,该属性默认为“1”,代表刷新时使用背景混合。如果该属性为“0”,则该窗口刷新的时候直接刷新自己,而不请求父窗口刷新背景,最终提高UI的渲染效率。

第十九篇:提高SOUI应用程序渲染性能的三种武器的更多相关文章

  1. 第十四篇-ImageButton控制聚焦,单击,常态三种状态的显示背景

    这里先用XML设置. myselector.xml <?xml version="1.0" encoding="utf-8"?> <selec ...

  2. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  3. Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)

    第十九篇(书中 8.8~8.10 节 内容) 开始 8.8节. 重点: 1.类型推断. 2.类型强制转换,使其拥有代码提示功能. 3.除了TS自带的类型判断,Egret官方也提供了类型判断的方法. 操 ...

  4. Chrome 开发者工具的Timeline和Profiles提高Web应用程序的性能

    Chrome 开发者工具的Timeline和Profiles提高Web应用程序的性能 二.减少 HTTP 的请求数    当用户浏览页面时,如果我们在用户第一次访问时将一些信息一次性加载到客户端缓存, ...

  5. 性能调优之提高 ASP.NET Web 应用性能的 24 种方法和技巧

    性能调优之提高 ASP.NET Web 应用性能的 24 种方法和技巧   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对 ...

  6. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...

  7. 使用Memcached提高.NET应用程序的性能

    在应用程序运行的过程中总会有一些经常需要访问并且变化不频繁的数据,如果每次获取这些数据都需要从数据库或者外部文件系统中去读取,性能肯定会受到影响,所以通常的做法就是将这部分数据缓存起来,只要数据没有发 ...

  8. 【转】使用Memcached提高.NET应用程序的性能

    在应用程序运行的过程中总会有一些经常需要访问并且变化不频繁的数据,如果每次获取这些数据都需要从数据库或者外部文件系统中去读取,性能肯定会受到影响,所以通常的做法就是将这部分数据缓存起来,只要数据没有发 ...

  9. 使用Chrome DevTools的Timeline和Profiles提高Web应用程序的性能

    来源: http://www.oschina.net/translate/performance-optimisation-with-timeline-profiles 我们都希望创建高性能的Web应 ...

随机推荐

  1. Jquery Ajax处理,服务端三种页面aspx,ashx,asmx的比较

    常规的Jquery Ajax 验证登录,主要有3种服务端页面相应 ,也就是 aspx,ashx,asmx即webserivice . 下面分别用3种方式来(aspx,ashx,asmx)做服务端来处理 ...

  2. split() 注意事项.

    split(): 当函数默认为空,它会把所有空格(空格符.制表符.换行符)当作分隔符. 但是当函数参数默认为其他,将会对 空格符.制表符.换行符 当作元素进行分割. a = 'hello world! ...

  3. docker数据拷贝

    docker数据拷贝的方式有很多种,下面介绍几种数据拷贝的方式:此处只是介绍几种简易的方式,更多方式可以google下. 从容器中向主机拷贝数据 docker cp <containerId&g ...

  4. linux学习之lvm-逻辑卷管理器

    一.简介 lvm即逻辑卷管理器(logical volume manager),它是linux环境下对磁盘分区进行管理的一种机制.lvm是建立在硬盘和分区之上的一个逻辑层,来提高分区管理的灵活性.它是 ...

  5. java入门 第一季3

    运算符:算术运算符,赋值运算符,比较运算符,逻辑运算符,条件运算符 1. 算术运算符: 自增和自减只能用于操作变量,不能直接用于操作数值和常量 % 求余数 2.  赋值运算符 = 赋值运算符为变量或常 ...

  6. html中的alt和title用法区别

    html中的alt和title用法区别 首先明确一下概念,alt是html标签的属性,而title既是html标签,又是html属性.title标签这个不用多说,网页的标题就是写在<title& ...

  7. XLL 框架库中的函数

    这个框架库,可以让编写 XLL 更加容易.包含了管理 XLOPER/XLOPER12 内存的简单函数,创建临时 XLOPER/XLOEPR12 ,强制调用回调函数 (Excel4,Excel4v,Ex ...

  8. ios 中直接修改frame里边某个属性的简便方法

    参考:http://www.cnblogs.com/wengzilin/p/4359865.html 在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候.我们知道,正常情况下我们无法 ...

  9. CString 操作

    CString Left( int nCount ) const;                   //从左边1开始获取前 nCount 个字符 CString Mid( int nFirst ) ...

  10. August 26th 2016 Week 35th Friday

    It always seems impossible until it's done. 在事情未完成之前,一切都看似不可能. When I was young, once I had to lift ...