近来公司有个web app 项目运行在移动版android系统上,发如今电脑上跑的很流畅的web页面在移动版webkit上很是不流畅。根本没法和native app相媲美。HTML5的性能还真是让人纠结啊的egg pain...css
后来发现国外的 Netflix 网络电视服务提供商的web app,全是HTML5实现的,并且2年前就跑在了250多种移动设备上,在40多个国家上市,UI很是流畅。因此以为HTML5仍是勉强有救的。android
公司找了Netflix的资料,决定对自身的web app项目进一步优化,到目前为止效果很是明显。不废话了,如下就是优化点:web
一、使用设置内联样式取代改变class,即直接设置style来改变样式chrome
这一点,我一开始也没法理解,但通过测试至少在硬件性能较差的移动版webkit内核浏览器上就是这样的windows
二、有些css选择器写法会导到深度重绘,应避免这样的css选择器写法,好比:浏览器
.list-showing #browse { … }网络
三、当webkit-transition中的duration属性大于0时,在animation周期中会致使 重复屡次重绘闭包
四、reuse instead of allocate&destroyapp
重用代替从新申明建立和销毁,重用已有的dom而不是建立新的删除旧的,以减小dom树的更新dom
五、don’t do in software what can be handled by hardware
能用硬件加速就用硬件加速,硬件加速方式直接就是paint出来,而非硬件加速方式则须要计算,渲染,再paint
六、如下几个css属性要注意
-webkit-gradient
-webkit-box-shadow
background-position
background-repeat
border
适当的选择使用它们
七、静态图片渲染永远快于css渲染
css须要经过cpu来绘制,一旦图片下载完成,渲染速度永远快于css实现的方式,css绘制 效果须要在布局上从新计算,渲染,绘制
八、尽可能少作动画,若是要,就使用transition
在各设备上支持的比较好;
对应的动画属性也较多;
渲染引擎会对此进行优化;
-webkit-transition-property: opacity, -webkit-transform; 这两个属性在硬件加速下不须要重绘
九、强制某些元素拥有硬件加速能力
-webkit-transform: translateZ(0);
而这个属性就像是之前zoom:1那样不会对效果产生任何引响,但确使对应的元素拥有了硬件回事能力
十、内存注意项
避免内存无限增加;
应最少的丢掉再建立元素(dom);
video设置为display:none可能会释放掉内存;
对象太多会致使频繁而且很慢的垃圾回收;
闭包什么的会致使内存持续上升;
十一、层(我理解为div)
减小层的数量
层保持越小越好
尽可能少的去更新层
合理组合层
=============================== i am 分割线 ====================================
如何使用调试工具来帮助优化?
开启浏览器的调试功能safari (个人是在mac os上,windows上不知道有木有,好像safari6.0后windows上就木有了)
在safari中显示debug菜单项,须要在terminal程序中输入
defaults write com.apple.Safari \ IncludeInternalDebugMenu 1
而后就能够在safari菜单栏上看到多了一个debug选项
在debug菜单项内中找到show composition borders,而后你就能够看到你的网页各区域的状态了
色块说明:
一、红色compositing layer
表明的是 组合层,左上角的数字表明recalculations从新计算次数
渲染层会被扁平化(像素化)为单一的图片形式,有时会被映射到GPU纹理上
二、黄色container layer
表明内容层, 没有红色层 (no backing surface)-子元素为layer
三、青色overflow box
no backing surface-debugging tool.(不知道怎么翻译,不过这个不影响)
四、绿色 tiled layer
layer宽或高大于1024px
chrome中也有相似的调试功能,(mac os, windows都有)
在chrome浏览器地址栏中输入 about:flags
而后把 composited render layer borders 这个选项 Enable
注:转载请注明出处博客园:绿茶-续(偷饭猫)email: willian12345@126.com