简介
RAIL模型是一种以用户为中心的性能模型。最终目标不是让网站在任何设备上都可以运行很快,而是使用户满意。RAIL代表四个指标:
- Response 响应:在100ms内响应
- Animation 动画:在10ms内生成一帧
- Idle 空闲:将推迟的工作分为50ms的块,利用空闲时间完成
- Load 加载:在1000ms内呈现内容
加载优化
可以通过Lighthouse PageSpeed WebPageTest Pingdom等工具来检测加载的时间。
加载的主要内容有:
文本内容
- 文本内容需要压缩。在不影响代码功能的情况下,通过删除空格缩进和不必要的字符来压缩。可以借助很多压缩的工具,比如Minifer、HTML Minifer等。
- 在服务端设置Gzip压缩,Gzip擅长文本压缩,可以减少70%以上的体积,但对非文本的压缩效果很不好,比如图片。以apache服务器为例,设置.htaccess文件如下
<IfModule deflate_module>
# Enable compression for the following file types
AddOutputFilterByType \
DEFLATE \
application/javascript \
text/css \
text/html \
text/javascript \
text/plain \
text/xml
</IfModule>
- 减少第三方库的体积,比如,如果没有使用到jQuery的大部分功能,仅仅是使用其单个功能,可以用其他方式来替代,而不是引入整个库。
图形内容
- 移除不必要的图片,或者延迟其加载
- 选择合适的图片格式,在需要透明背景时选择png,普通照片选择jpg,动画选择gif。png的质量并没有明显比jpg好,适当的选择jpg而不是png可以大幅度减少图片的体积。
- 删除图片的meta信息,meta信息包括相机硬件信息、时间戳、软件信息、文件格式、地理信息等,对于大多数网站来说,这些信息都不重要。使用工具(VerExif)可以移除这些信息,压缩效果大约在10%左右。
- 减小图片尺寸或裁剪图片:根据设备使用尺寸合适的图片;裁剪图片,只保留关键的图片内容;
- 压缩图片:使用在线工具tinypng可以大幅度压缩图片,大约可以压缩50%~70%。
HTTP请求
所有的资源都需要从服务器请求,请求优化方式有:
- 合并文本文件
- 合并图片资源,雪碧图
- 使用HTTP2,HTTP2可以多路请求,大大提升了HTTP的请求速度
- 将关键的script提取出来作为内联脚本,优先执行,而不是和其他script一切放到外置文件中
HTTP缓存
当浏览器首次加载一个页面时,会缓存页面资源到http cache,这样在下一次访问这个页面时,就可以利用之前的缓存,从而加快访问。
- 启用缓存,缓存那些很久都不会改变的资源,比如网站logo
- 设置缓存头,cache-control(no-cache no-store public private max-age)与expires