图片很重要
在智能小程序开发的过程中,经常需要引入图片资源。如果使用图片不当(过多过大的图片),在加载时会消耗更多的系统资源,从而影响整个页面的性能,因此做好图片优化非常重要。
如何进行图片优化
第一步:控制大小
(1)针对本地图片
由于放置在本地的图片会被直接打包到小程序包内,图片过大会导致包体积过大,加载时间变长。同时图片过大也会导致渲染时间变长,因此开发者需尽可能的压缩图片的大小。以下列出一些图片优化的思路:
对于不需要透明格式的图片,推荐采用
jpeg
格式来代替png
格式。安卓端可使用
webp
的图片格式。webp
图片格式在有损压缩的情况下,肉眼不易察觉出压缩前后的变化,但是体积却得到很明显的减小(注意: iOS 百度 App 版本 < 11.22 时不支持webp
格式)。确保小程序包内无冗余和无用的图片资源。
请注意默认情况下会加载,但可能之后永远不会渲染的图片,例如“轮播图”,“手风琴”和“图片画廊”。
为了缩短渲染关键图片所需的时间,请延迟加载不太重要的图片,并在关键图片渲染完成后再加载后续内容。
使用工具对图片进行压缩。常见的压缩工具如下:
图片格式 压缩工具 压缩比例 png 格式 https://www.npmjs.com/package/pngquant-bin 50-70 jpeg 格式 https://www.npmjs.com/package/jpegtran-bin 默认
(2)针对网络图片
在智能小程序项目中,除了小程序的 icon,基本都会部署到 CDN 上。对于这样的网络图片,也需要进行压缩。下面列出一些优化的思路:
- 通过 CDN 静态资源服务器获取图片资源,并添加图片压缩规则。
- 使用如上节提起的工具对图片进行压缩后,再上传至 CDN。
第二步:开启图片懒加载
可以使用懒加载优化小程序。智能小程序的image
组件提供了lazy-load
属性,可以开启图片的懒加载功能:
<image lazy-load="true"/>
第三步:谨慎使用耗费性能的属性
image
组件mode
属性提供了 13 种模式,其中widthFix
模式是其中一种,作用是保持图片宽度不变,高度自动变化,并保持宽高比不变。由于widthFix
模式需要动态计算图片的宽度,导致页面的重绘,因此应谨慎使用mode
属性的widthFix
模式。
第四步:使用渐进式 JPEG 来优化用户体验
在打开渐进式 JPEG 时会先展示整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰。这种格式的主要优点是在网络较慢的情况下,可以预览到图片的轮廓,一定程度上可以提升用户体验。
第五步:利用体验评分工具检测图片问题
利用开发者工具提供的体验评分工具(Audits),开发者可以识别和检测影响智能小程序性能、体验的图片问题。
具体使用方法,详见体验评分工具说明。
优化实例
<!--优化前-->
<image src = "../imgUnZip.jpg" class="image"/>
<!--优化后-->
<image lazy-load="true" src = "../imgZip.jpg" class="image"/>
从下图可以明显的看出,优化后的图片更快的渲染到屏幕上。
图片优化前
图片优化后
以上是在极端测试条件下的结果,在实际使用中效果可能相对不明显。