暴风影音5,启动如何提速3倍客户端“快时代”技术分享为什么要快?调查表明:对暴风影音最不满意的原因中关于“快”的要求如下:•使用过程响应慢(22.6%)——要求快•在线视频播放卡(13.3%)——要求快•广告方面的抱怨(34.8%)——已经进行了4轮大扫除•说不清楚(14.9%)•其他缺点(14.4%)有将近35.9%的用户体验表明,用户要求一个“快”的播放器22.60%13.30%34.80%14.90%14.40%使用过程响应慢在线视频播放卡广告方面的抱怨说不清楚其他缺点启动要变快,遇到的两个问题(1)启动软件时,如何将不必要的事情扔掉?重构:将原有复杂架构下各个模块的复杂关联去掉,保证每个模块的职责单一(2)如何能让界面最快的展现出来?极速皮肤引擎:将加载和显示皮肤的速度做到极致1.重构:暴风新旧架构对比无独立的皮肤引擎业务子系统n对比暴风影音3:暴风影音5的架构设计特点如下:•组件化、模块化、子系统化设计•分层设计,松藕合设计要求•皮肤引擎与业务逻辑分离式设计业务子系统1相互调用相互调用相互调用暴风3播放器基础组件2.1极速皮肤引擎:皮肤架构设计暴风影音3播放器无独立的皮肤引擎对象管理器JS脚本引擎XML加载器暴风影音5播放器皮肤引擎皮肤解析器对象管理器文件加载器图片管理显示管理皮肤元素库元素事件管理对比暴风影音3:暴风影音5的皮肤引擎设计特点如下:•对于冷启动的优化,让硬盘限制在可接受的范围•图片资源的优化,带来启动速度的质变•显示优化锦上添花,达到超快体验相互调用相互调用2.2极速皮肤引擎:优化的核心手法优化核心手法读取优化加载优化代码优化显示优化自定义存储自定义压缩对象重用九宫格应用……2.2.1IO读取优化皮肤优化DLL交叉优化读取优化DLL交叉优化•减少主程序的静态链接DLL。•业务DLL按需加载。优化皮肤•自定义文件存储格式,减少文件读取交数,加速读取速度。•自定义压缩算法,减少文件IO读取。2.2.1IO读取优化结果2.2.2加载优化加载优化资源优化•多XML描述•首界面元素重用优化•图片对象重用•显示对象重用其它优化•图片显示优化2.2.3代码优化Region优化VisualC++基础库的选择代码优化VC基础库的选择•使用WTL做为基础库•为什么选择WTL?Region优化•采用更高效的算法,让Region窗口速度更好•对于常见圆角窗口,每个角只处理10*10像素IDEVC6VC2005VC2008VC2010库大小1111K1004K3694K4320K版本6.08.09.010.0基础库SDKMFCWTL优点速度最快速度慢速度接近SDK缺点开发效率低开发效率高开发效率高2.2.3VisualC++基础库选择MFC库大小变化IDEVC6VC2005VC2008VC2010版本3.08.09.010.0ATL库大小变化WTL最新版本:8.12.2.4显示优化PNG显示优化BMP透明显示优化MMX/SSE显示加速让图片更快速显示出来!抛弃传统的图片显示方法,挖掘CPU潜力!抛弃传统窗口刷新技术,采用革新的窗口主动刷新技术。最终优化结果(一)首次运行-秒表首次运行-工具非首次运行-秒表非首次运行-工具暴风影音50.850.330.570.25xx影音1.981.540.850.460.000.501.001.502.002.50中档PC/XP环境最终优化结果(二)首次运行-秒表首次运行-工具非首次运行-秒表非首次运行-工具暴风影音50.840.450.530.16xx影音1.721.390.640.370.000.200.400.600.801.001.201.401.601.802.00中档PC/Win7环境