Shopify Free Trial Apply
Shopify 60天试用
Shopify 14天试用

web移动端页面性能优化方案(进阶版)

如何优化HTML5在移动设置上的性能表现,首先我们需要明确以下几个原则:
1、PC优化手段在Mobile侧同样适用。
2、在Mobile侧我们提出三秒种渲染完成首屏指标。
3、基于第二点,首屏加载3秒完成或使用Loading。
4、基于联通3G网络平均338KB/s(2.71Mb/s),所以首屏资源不应超过1014KB。
5、Mobile侧因手机配置原因,除加载外渲染速度也是优化重点。
6、基于第五点,要合理处理代码减少渲染损耗。
7、基于第二、第五点,所有影响首屏加载和渲染的代码应在处理逻辑中后置。
8、加载完成后用户交互使用时也需注意性能。
 
我们可以先看下面的一张图片:

20160218103753_24106.jpeg

 
从上图可以看出,上面基本涵盖所有的优化方案了。在这里,只是针对其中几个代表性方案出来探讨。
加载优化
对于移动端的网页来说,加载过程是最为耗时的过程,可能会占到总耗时的80%时间,因此是优化的重点,当然,手机站的其他前端要素优化也是不能忽略的。


1、减少HTTP请求
 因为手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过4个,
(1)、合并CSS、JavaScript
(2)、合并小图片,使用雪碧图(简单说:就是一张png透明背景图片,上面有很多其他图片,然后通过css的背景图片定位属性定到所需图片,这样就不用一张张图片的请求了,请求一张雪碧图即可,这样大大减少请求数
 
2、缓存
 使用缓存可以减少向服务器的请求数,节省加载时间,所以所有静态资源都要在服务器端设置缓存,并且尽量使用长Cache(长Cache资源的更新可使用时间戳)。
(1)、缓存一切可缓存的资源
(2)、使用长Cache(使用时间戳更新Cache)
(3)、使用外联式引用CSS、JavaScript(所以千万别写内联这些了)
 
3、压缩HTML、CSS、JavaScript
减少资源大小可以加快网页显示速度,所以要对HTML、CSS、JavaScript等进行代码压缩,并在服务器端设置GZip。
(2)、压缩(例如,多余的空格、换行符和缩进)
(3)、启用GZip
 
4、无阻塞
写在HTML头部的JavaScript(无异步),和写在HTML标签中的Style会阻塞页面的渲染,因此CSS放在页面头部并使用Link方式引入,避免在HTML标签中写Style,JavaScript放在页面尾部或使用异步方式加载。
 
5、压缩图片
图片是最占流量的资源,因此尽量避免使用他,使用时选择最合适的格式(实现需求的前提下,以大小判断),合适的大小,然后使用智图压缩,同时在代码中用Srcset来按需显示。(关于srcset 属性可以狠狠地点击查看)
(  !important 过度压缩图片大小影响图片显示效果。)
 
6、减少Cookie,Cookie会影响加载速度,所以静态资源域名不使用Cookie。
 
7、异步加载第三方资源
第三方资源不可控会影响页面的加载和显示,因此要异步加载第三方资源,当然最好还是本地化!
 
脚本执行优化
脚本处理不当会阻塞页面加载、渲染,因此在使用时需要注意以下几点:

1、CSS写在头部,JavaScript写在尾部或异步。
2、避免图片和iFrame等的空Src,空Src会重新加载当前页面,影响速度和效率。
 
CSS优化

1、尽量避免写在HTML标签中写Style属性。
2、避免CSS表达式,CSS表达式的执行需跳出CSS树的渲染,因此请避免CSS表达式。
3、移除空的CSS规则,空的CSS规则增加了CSS文件的大小,且影响CSS树的执行,所以需移除空的CSS规则。
4、正确使用Display的属性,Display属性会影响页面的渲染,因此建议各位要合理使用。
    (1)、display:inline后不应该再使用width、height、margin、padding以及float
    (2)、display:inline-block后不应该再使用float
    (3)、display:block后不应该再使用vertical-align
    (4)、display:table-*后不应该再使用margin或者float

至于为什么,可以网上查看一下w3c,举例,inline-block是行内块级元素,如果你再使用float又变成浮动元素;
inline是行内元素,是没有宽高的,自然就没有办法设置内外间距
5、不滥用Float,Float在渲染时计算量比较大,尽量减少使用。
6、不滥用Web字体,Web字体需要下载,解析,重绘当前页面,尽量减少使用,所以字体要本地化。
7、不声明过多的Font-size,过多的Font-size引发CSS树的效率。
8、值为0时不需要任何单位,为了浏览器的兼容性和性能,值为0时不要带单位,举例padding:0 而不是0px
9、标准化各种浏览器前缀
    (1)、无前缀应放在最后。
    (2)、CSS动画只用(-webkit- 无前缀)两种即可。
    (3)、其它前缀为“-webkit- -moz- -ms-无前缀”四种(-o-Opera浏览器改用blink内核,所以淘汰)。
10、避免让选择符看起来像正则表达式。(不过一般来说我们不会将css选择器写的过于复杂)
 
JavaScript执行优化
1、减少重绘和回流
    (1)、避免不必要的Dom操作(如果套模板,没有用到的千万记得删除)
    (2)、尽量改变Class而不是Style,使用classList代替className(举例,jquery改变一个节点的属性,最好是通过addClass,而不是直接改变css属性)
    (3)、避免使用document.write
    (4)、减少drawImage
2、缓存Dom选择与计算,每次Dom选择都要计算,缓存他。
3、缓存列表.length,每次.length都要计算,用一个变量保存这个值。
4、尽量使用事件代理,避免批量绑定事件。(事件冒泡、事件补货了解一下,一次使用终生受益
5、尽量使用ID选择器,ID选择器是最快的。
6、TOUCH事件优化,使用touchstart、touchend代替click,因快影响速度快,但应注意Touch响应过快,易引发误操作。
 
渲染优化
HTML文档是以包含文档编码信息的数据流方式在网络间传输,页面的编码信息一般会在HTTP响应的头部信息或在文档内的HTML标记中指明,客户端浏览 器只有在确定了页面编码后才能正确的渲染页面,所以在绘制页面或执行任何的javascript代码前,大部分的浏览器(ie6、ie7、ie8除外)都 会缓冲一定字节的数据来从中查找编码信息,不同的浏览器当中预缓冲的字节数是不一样的。


1、HTML使用Viewport
Viewport可以加速页面的渲染,请使用以下代码:
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
2、减少Dom节点
Dom节点太多影响页面的渲染,应尽量减少Dom节点。(html也要精简,减少不必要的节点)

3、动画优化
(1)、尽量使用CSS3动画。
(2)、合理使用requestAnimationFrame动画代替setTimeout。
(3)、适当使用Canvas动画5个元素以内使用css动画,5个以上使用Canvas动画(iOS8可使用webGL)。


4、高频事件优化
 Touchmove、Scroll事件可导致多次渲染(尽量不要用)。
(1)、使用requestAnimationFrame监听帧变化,使得在正确的时间进行渲染。
(2)、增加响应变化的时间间隔,减少重绘次数。

5、GPU加速
CSS中以下属性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)来触发GPU渲染,请合理使用。

另外,过渡使用会引发手机过耗电增加。

HTML5只是一种方法和手段,并不是万能的,思考怎么符合移动端设备特别是没错,但前提务必要基于PC站框架结构和内容。
 
1
2018-05-28

2 个评论

本文主要内容转载自网络,加粗字体为一些简单的解释,以及部分重点关注的内容
感谢转载干货,分享给大家。

要回复文章请先登录注册