网页的性能优化是前端开发老生常谈的热门话题,其中微信小程序因其页面双线程架构设计,所以性能优化的手段跟传统的 H5
应用不太一样。今天主要介绍一下微信小程序页面双线程架构的特性给页面渲染带来的一些影响,以及应对的一些渲染性能调优策略。为了叙述方便,下文会把微信小程序简称为小程序。
小程序的双线程架构
与传统的浏览器Web页面最大区别在于,小程序的是基于 双线程
模型的,在这种架构中,小程序的渲染层使用 WebView
作为渲染载体,而逻辑层则由独立的 JsCore
线程运行 JS
脚本,双方并不具备数据直接共享的通道,因此渲染层和逻辑层的通信要由 Native
的 JSBrigde
做中转。
小程序更新视图数据的通信流程
每当小程序视图数据需要更新时,逻辑层会调用小程序宿主环境提供的 setData
方法将数据从逻辑层传递到视图层,经过一系列渲染步骤之后完成UI视图更新。完整的通信流程如下:
引发渲染性能问题的一些原因
在上述通信流程中,一些不恰当的操作可能会影响到页面渲染的性能:
setData传递大量的新数据
数据的传输会经历跨线程传输和脚本编译的过程,当数据量过大,会增加脚本编译的执行时间,占用 WebView JS
线程。
下图是我们做的一组测试统计:在相同网络环境下,各个机型分别对大小为 1KB
、 2KB
、 3KB
的数据执行 setData
操作所消耗的时间。
从图中可以看出, setData
数据传输量越大,数据传输所消耗的时间越大。
频繁的执行setData操作
频繁的执行 setData
会让 WebView JS
线程一直忙碌于脚本的编译、节点树的对比计算和页面渲染。导致的结果是:
新闻热点
疑难解答