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. Nodejs 及 NPM 的安装

    Nodejs 及 NPM 的安装,有两种方式: 方式1.Nodejs 及 NPM  一起安装 https://nodejs.org/en/download/  下载  Windows Installe ...

  2. ios8 新增的 showViewController 和 showDetailViewController

    1.showViewController 先看看说明: You use this method to decouple the need to display a view controller fr ...

  3. PHP javascript cookie

    2015-07-30 16:54:58 ................................cao!!!! 汉字, 邮箱的@符号 容易出错 PHP setcookie 的时候, 不要url ...

  4. Oracle分页语句

    select * from (select A.*,rownum rd from (select * from [tablename] where [condition] order by  [con ...

  5. [Android]如何获取当前用户设置的时区

    方法:TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT);获取的值如GMT+08:00,GMT-04:00,EDT  另附:国家码查询 ...

  6. 【linux】英文显示乱码解决

    在linux环境中中文显示正常,而英文却显示乱码 用 echo $LANG 显示编码为 zh_CN.GB18030 解决方法: 输入 export LC_ALL=POSIX 即可

  7. [Android Pro] Normal Permissions

    As of API level 23, the following permissions are classified as PROTECTION_NORMAL: ACCESS_LOCATION_E ...

  8. iOS 自定义返回按钮,保留系统滑动返回

    原文链接 自定义返回按钮保留系统滑动返回手势.gif 1.简介 使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使 ...

  9. NYOJ之猴子吃桃问题

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAskAAAIMCAIAAACIcqa9AAAgAElEQVR4nO3dO3Li3BaG4TMJcgbi1A

  10. Android之IPC机制

    Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...