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. java面试宝典(蓝桥学院)

    Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...

  2. 如何查看Git对象

    原文:http://gitbook.liuhui998.com/7_2.html 如果在阅读本文之前,你还不知道git是如何进行存储的,请先阅读<Git是如何存储对象的>. 我们可以使用c ...

  3. Thread.Sleep vs. Task.Delay

    We use both Thread.Sleep() and Task.Delay() to suspend the execution of a program for some given tim ...

  4. Debian上安装Apache+Django全过程

    -->start sudo apt-get install apache2 libapache2-mod-wsgi #https://wiki.debian.org/zh_CN/Apache s ...

  5. linux shell 中 printf 与 echo的区别

         echo echo是非常常用的shell命令.参数如下: -e:打开反斜杠字符backslash-escaped的解析,即对/n,/t等字符进行解析,而不视之为两个字符 -E:关闭反斜杠字符 ...

  6. metro中stream转IRandomAccessStream

    下面的例子是从zip压缩文件解压出jpg文件流,再显示出来. StorageFile zip = await KnownFolders.PicturesLibrary.GetFileAsync(&qu ...

  7. SUSE下FTP服务器搭建

    FTP(File Transfer Protocol),是TCP/IP网络上两台计算机传送文件的协议,是在TCP/IP网络和Internet上最早使用的协议之一,属于网络协议组的应 用层.FTP客户机 ...

  8. Divide and Conquer:Cable Master(POJ 1064)

    缆绳大师 题目大意,把若干线段分成K份,求最大能分多长 二分法模型,C(x)就是题干的意思,在while那里做下文章就可以了,因为这个题目没有要求长度是整数,所以我们要不断二分才行,一般50-100次 ...

  9. VS2010编译Qt4.8.2的64版本库

    安装qt-win-opensource-4.8.2-vs2010.exe(从http://download.qt.io/archive/qt/4.8/4.8.2/下 载),这个是32位的,里面有编译好 ...

  10. osgearth 配置mapNode TerrainOptions

    设置瓦片PagedLOD节点最小可视距离因子,默认是6.0 minTileRangeFactor() Map *map = new Map();WWOptions wwImgGlobe;map-> ...