- 【卡顿闪退】嵌套使用过多自定义组件会卡顿闪退?
- 需求的场景描述(希望解决的问题) 我们的小程序比较复杂,嵌套使用了很多自定义组件,自定义组件间传递的数据有些是较大的对象。现在发现性能很差,用户经常反馈卡顿闪退,做性能分析的时候提示过多地调用了setData,但其实我们的setData并不多,只是自定义组件层级多而已。 我理解是不是因为自定义组件的数据传递机制有点问题? 举个例子:页面A中使用了自定义组件C1,自定义组件C1中又使用了自定义组件C2 ...... 自定义组件的数据传递机制是不是这样的: 1、页面A通过调用setData,把A的数据stringify后传递给了页面A的wxml(从js线程 -> 渲染线程) 2、页面A的wxml发现使用了组件C1,于是把要传递给C1的数据parse之后传递给C1的js线程(从渲染线程 -> js线程) 3、组件C1的js接收到数据之后,需要把数据传递给组件C1的wxml,于是又stringify一次(从js线程 -> 渲染线程) 4、组件C1的wxml发现使用了组件C2,于是把要传递给C2的数据parse之后传递给C2的js线程(从渲染线程 -> js线程) 5、组件C2的js接收到数据之后,需要把数据传递给组件C2的wxml,于是又stringify一次(从js线程 -> 渲染线程) 如此类推。。。。。。 我的问题是: 1、我理解的数据传递过程对么,是这样实现的吗?(代码片段里做了个简单的验证,同一份数据传递之后确实不一样了) 2、如果1的假设是对的,那可不可以通过用app.globalData.xx之类的方式来做数据传递呢?要setData的数据放到app.globalData.xx里,然后在自定义组件中去监听app.globalData.xx的变化(js线程 -> js线程),是不是可以节省下一趟的stringify、parse的开销? 3、如果2的假设是对的,getApp的开销有多大,是不是可以忽略不计的? 4、如果上面的假设没错,那这是不是做性能优化的一个思路呢?
2019-03-28 - swiper滑动页面会卡死
使用swiper快速滑动的时候会卡死,就这样卡在中间动不了[图片]
2019-01-17