H5教程:移动页面性能优化
随着移动互联网的发展,我们越发要关注移动页面的性能优化,今天跟大家谈谈这方面的事情。
首先,为什么要最移动页面进行优化?
纵观目前移动网络的现状,移动页面布局越来越复杂,效果越来越炫,直接导致了文件越来越大,下载和运行速度越来越低,而速度低会造成不良影响,据统计:




- 代码优化(css、html、js优化)
- 减少HTTP请求(雪碧图,文件合并…)
- 减少DOM节点
- 无阻塞(内联CSS,JS置后…)
- 缓存
- ...
这些手段大部分适用于移动端,这都是一些耳熟能详的手段,今天这里就讲了,有兴趣可以参考PDI课程《网站性能优化》。 今天要讲的主要是一些适用于移动端的优化手段,现在进入正题。 首先我们得关注一下一个页面从开始到呈现完毕需要经历什么阶段,主要有四个阶段:

首先,加载中有哪些优化手段:
1. 预加载
预加载方式有两种: A.显性加载

2. 按需加载
按需加载是不可或缺的优化手段,主要有以下两种方式:

3. 压缩图片
对于压缩图片,首先要提的是jpg文件:

4.尽量避免重定向
为什么要尽量避免重定向呢?因为如图:
5. 使用其他方式代替图片
有两种方式,第一种是:依靠css3绘制图片


然后,针对脚本执行中优化手段
1.尽量避免DataURI
DataUri在移动端并不如它在pc端吃香,因为:
2.点击事件优化
在移动端请适当使用touchstart,touchend,touch等事件代替延迟比较大的click事件。Click之所以慢是因为mousedown导致的:
针对渲染阶段中优化手段,也提两点:
1. 动画优化
a) 尽量使用css3动画 优点:
- 不占用js主线程
- 可利用硬件加速
- 浏览器可对动画做优化
缺点:
- 不支持中间状态监听
b) 适当使用canvas动画 优点:
- 可规避渲染树的计算渲染更快
缺点:
- 开发成本高
- 维护较麻烦
通过对css3动画和canvas动画对比:
- 能解决脚本问题引起的丢帧,卡顿问题
- 支持中间状态监听
缺点:
- 兼容问题


2. 高频事件优化

- 使用requestAnimationFrame监听帧变化,使得在正确的时间进行渲染
- 增加响应变化的时间间隔,减少重绘次数。
最后,针对合成/绘制的一个优化手段:
GPU加速 触发GPU加速的方式有:
- CSS3 transitions
- CSS3 3D transforms
- WebGL 3D 绘制
- Video
- ...
使用GPU加速前有对比实验:GPU加速实际上是大幅减少了合成/绘制时间,从而大大地提高了页面速度,但GPU加速有自己的缺点: 过多的GPU层会带来性能开销,主要原因是使用GPU加速其实是利用了GPU层的缓存,让渲染资源可以重复使用,所以一旦层多了,缓存增大,就会引起别的性能问题。
总结

- 按需加载提升速度,但可能导致大量重绘;
- Touch响应快,但很多场景不适合;
- GPU加速效率高,但内存开销大等等
- Loading会让整体体验流畅,但容易造成用户流失
- 图片压缩让带宽成本降低,但可能会导致视觉效果变差
- 类似这样的矛盾点还有很多,请结合业务按照实际情况进行优化。
转自:TGideas
