个人案例
- 【性能优化】wxs函数调用页面数据对性能的影响
背景 我们发现有个页面在加载100个节点的时候会很卡,正常来说应该不会这么卡的。所以我深入排查了一下问题的原因。 场景 有个横向滚动的列表,向右滚动到最右边会加载新的列表,而两个卡片有可能是属于一个相同的父节点,则需要判断是否为同一个节点,方便写样式。 节点代码实例 [代码]<wxs module="utils"> var some_msg = "hello world"; module.exports = { msg : some_msg, judgeSameParent: function(list, index){ if(index<1 || list.length <= index){ return false } return list[index-1].parentId === list[index].parentId } } </wxs> <view class="intro">测试 wxs 调用函数传入数组的性能</view> <view> <scroll-view scroll-x id="scrollView" style="height: 300rpx;display: flex; background-color: gray;" lower-threshold="300rpx" bindscrolltolower="handleScrollToLower" > <view style="display: flex; flex-direction: row;"> <view wx:for="{{list}}" style="width: 200rpx;height: 200rpx;margin-top: 50rpx; flex-shrink: 0;background-color: green;margin-right: 10rpx;" wx:for-index="idx" wx:for-item="item" wx:key="idx" > <view wx:if="{{utils.judgeSameParent(list, idx)}}" style="width: 20rpx; height: 20rpx; background-color: greenyellow;"></view> <view wx:if="{{utils.judgeSameParent(list, idx)}}" style="width: 20rpx; height: 20rpx; background-color: greenyellow;"></view> </view> </view> </scroll-view> </view> [代码] 通过performance面板查看到页面运行性能会比较差,有一个运行时花了169ms [图片] 深入查看究竟是哪个函数耗时比较多,发现都是$gdc 函数比较耗时 [图片] 深入排查$gdc 函数究竟是什么 之前在做单元测试渲染的时候,发现可以通过小程序原生编译器编译wxml页面,于是我接入了单元测试,劫持了wxml的编译结果,找到了$gdc函数。 [图片] 经过分析,发现$gdc函数是一个自定义深复制函数。 所以如果我的数组越大,越复杂,就越耗时,渲染层就会卡顿,性能不好。 思考深复制的原因 wxs函数运行的时候,能拿到渲染数据,如果是值引用的话,有可能在wxs函数运行的时候修改了渲染层的渲染数据,比如说: [代码]wxs.func = function(list){ // 删除原有数组的值 list.splice(0, 1) } [代码] 如果出现这样的情况,那渲染层的渲染数据和逻辑层的渲染数据就对应不上了,所以不能这样是值引用,必须要深复制。 解决方案 所以在没有必要的情况下,往wxs函数里面尽量不要传对象,尽量传基本类型的数据。 当前这个场景的解决方案也可以将wxs层的处理放到js层,预处理数据。 代码片段:https://developers.weixin.qq.com/s/hhHT88mB74yi 备注: 代码片段的编译和页面编译不一样,函数名会不一样,$gdc 对应的函数名为K 小程序项目:https://github.com/aa875982361/test-wxs-func-performance
2022-03-31 - “小程序征文·大学篇——分享你和小程序的故事”评选结果
[图片] 感谢大家对【小程序征文·大学篇——分享你和小程序的故事】的热情参与与支持。主办方已基于评审规则,综合评委打分,评选出了本次活动的各个奖项。奖品将在结果公示后一个月内发放到作者帐户/联系并邮寄给作者。 现将评选结果公示如下: 评选结果 奖项 作者 作品 奖品 一等奖 金煜峰 小程序富文本能力的深入研究与应用微信开放社区官方认证“优秀创作者”勋章一枚 限量版微信数码相框1个 卓生 【征文大学篇】Attack!足球! 二等奖 林绪鑫🕊 #小程序大赛# 如何以产品视角打造一款小程序? 微信开放社区官方认证“优秀创作者”勋章一枚 限量版微信跳一跳运动系列套装1份 Zero 「高校开发者」小程序+ 云开发= 个人开发者快速创作的平台唐家四少官微 【高校开发者】小程序,遇见你真好Gasink 高校微信小程序大赛经验分享杂谈Zing22.渔政🍳 征文大学篇- 云开发·后端鉴权思路分享最佳人气奖 卓生 【征文大学篇】Attack!足球!限量版微信logo-T恤1件最受欢迎奖 在所不辞 小程序开发 · 一个大二学生的成长之旅限量版微信黄脸-T恤1件 微信团队 2019/6/28
2019-06-28