评论

小程序中对初始时渲染太多wxml节点数做懒加载是很有必要的!这是一个真实案例。

初次渲染超过1000个节点数,导致开发工具上视图渲染不出来问题分析并处理。使用懒加载将初次渲染节点数大大的减少,提升初次渲染页面的速度。

前言

在写小程序时,有个页面由于要展示很多内容,光弹窗都6个,还有大量的列表,所以wxml节点数很多,超过了小程序建议的1000个节点以下。

懒加载示例项目代码已放到 github 和 码云 上

问题

这个内容很多的页面是分包的第一个页面,再此之前开发工具上能正常的运行,因此没有去管它。但是在上周六(2020年1月16日)后,开发工具上就出问题了!!!进入这个分包页面,视图半天才渲染,但事件是会立即执行的(看点击事件及接口请求情况得出的结论)。由于代码和前一天相比没有改动,并且手机上是正常的,所以第一时间就怀疑是不是开发工具出问题了,于是就删掉了工具,并重新下载了两次(一次最新稳定版,一次最新预发布版本),可还是不管用,依然这分包的这个页面,渲染不出来。
之后,又将手机的性能监听面板打开,发现再次渲染耗时那数值一直在闪动,但始终停留在0ms,就肯定的是小程序渲染出问题了。又怀疑只要是分包页面都有问题,就发现其他分包页面,并没有问题。
然后,想着之前用体验评分时,已经提示了wxml节点数过多,就试探性的注释了一些代码。好家伙,开发工具立马就正常了。
在确定问题前,没有第一时间考虑自己代码的问题,因为就过了一天开发工具就不能运行了,这确实很奇怪。

优化代码

初次渲染时,并不需要全部都渲染出来,所以可以做懒加载,显示时再渲染,通过 wx:if 来控制是否显示。

通过测试,做了懒加载后的体验评分在性能上是比不做要高的。下面是两张对比图:

没有使用懒加载

使用了懒加载

项目介绍:

如上图要实现的效果是,初始渲染时,只渲染玄幻栏目的数据,当往下滑动快触底时,再渲染下一个。如果初始渲染完成后,点击第四个都市栏目,则需把二三四个栏目都渲染出来。

懒加载原理

小程序通过setData后的数据,再放入wxml上就会被渲染,但是我们可以通过设置wx:if让,节点不显示,就不会去渲染。当滚动触底后,再通过一个标识值来判断后续的渲染情况。

此例子中与只有触底后渲染下面的视图,再加了点击左边的分类时,也做做渲染。

比如:初始时只渲染了第一组数据,当时我点击了第四个分类时,要将第二个,第三个,第四个的数据都显示出来。 这也是通过这个标识值来判断。

示意图:

项目地址:

github地址

码云地址

最后一次编辑于  2021-01-21  
点赞 2
收藏
评论

2 个评论

  • Lyzzz
    Lyzzz
    2023-03-22

    感谢,提供优化思路了

    2023-03-22
    赞同
    回复
  • 还好
    还好
    2021-03-11

    请问下怎么解决的setData执行多次的问题

    2021-03-11
    赞同
    回复
登录 后发表内容