微信小程序this.setData()

在小程序中是没有DOM,BOM的,是数据驱动视图的。逻辑层中的 data 数据改变了,视图层 view 也会跟着改变,它是单向数据流的。如果想要触发视图中数据的更新,那么就需要借助setData这个方法用了setData的机制去把视图层和逻辑层做一个“中转站”两边连接起来。

当程序开始触发setData操作的时候,先把数据做成字符串形式传递,同时把转换后的数据拼接成js脚本形式。

 在微信打开小程序的时候,会先起了2个线程一个是view Thread,一个是AppService Thread, 通俗讲前者是视图层,后者是逻辑层。它们是独立的,各自职能不一样,但它们是并行操作的,小程序的页面展示都是嵌套在webview里面的,

 

这里配置了多少个页面,小程序都会预先加载多少个页面对应的webview,这是view Thread所做的操作,同时AppService Thread也是对应的页面做了逻辑层面的加载操作,会根据小程序的生命周期依次做逻辑操作,这里也会和view Thread有数据传输交互,下面一张图可以很详细的描述view Thread和AppService Thread同时加载一个页面的所有过程

在架构上,WebView 和 JavascriptCore 都是独立的模块,数据是不能直接共享的,为了让数据共享,WebView和JavascriptCore都提供了evaluateJavascript来实现,(在安卓机上老早以前提供的不是evaluateJavascript来调用js操作的,到sdk19以上采用evaluateJavascript方法)

由于有了以上的机制,造成了setData存在一些性能上的问题,如果频繁地调用,WebView和JavascriptCore执行并发多了就会造成用户体验卡顿的现象,为了减少性能开销,建议尽量对setData进行合并操作。

这样就减少了拼接js脚本的次数,从而提升了性能。

在Taro小程序框架里面更新数据时调用的 setState 为异步方法,自动对同一个事件循环多次setState调用,然后进行合并处理,还会对数据进行diff优化,自动剔除那些未改变的数据。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值