排卵期同房要注意什么| 女性后背疼挂什么科室| 小鸟来家里有什么预兆| 尿液白细胞高是什么原因| 不由自主的摇头是什么病| 最里面的牙齿叫什么牙| 声情并茂的意思是什么| 打嗝和嗳气有什么区别| 什么雨| 兔和什么属相最配| 同房痛什么原因引起的| 慢性炎伴鳞化是什么意思| 雷蒙欣氨麻美敏片是什么药| 由是什么意思| 内衣34是什么码| 为什么尿会很黄| 指甲盖凹凸不平是什么原因| 风热感冒吃什么食物| 血糖高应该注意什么| 4像什么| 冬瓜为什么叫冬瓜| 新鲜橄榄菜长什么样子| 小孩疝气是什么症状| 帝女花讲的是什么故事| 什么是脑死亡| 酪氨酸酶是什么东西| 乙肝是什么病| 宥怎么读什么意思| 粉色分泌物是什么原因| 术后血压低什么原因| 高考分数什么时候出来| 经常胃疼是什么原因| 胰腺在人体起什么作用| 东施效颦什么意思| 痔疮出血吃什么药| 杏仁有什么好处| 至死不渝下一句是什么| 女性肝囊肿要注意什么| 肩周炎用什么药好| 性生活出血是什么原因| 白露节气的含义是什么| 老婆的弟弟叫什么| 挛是什么意思| 手心朝上是什么意思| 英语八级是什么水平| 女同是什么意思| 1962年五行属什么| 盐是什么味道| 1号来月经什么时候是排卵期| 什么验孕棒准确率高| 叩齿是什么意思| 偶发室性早搏是什么意思| 中指戴戒指是什么意思| 伪娘是什么| 人体消化道中最长的器官是什么| 什么叫入伏| hairy什么意思| 男人眼袋大是什么原因造成的| 牙髓炎吃什么药| 乔迁送什么礼物好| 五谷指的是什么| 一节黑一节白是什么蛇| 考妣是什么意思| 尿检弱阳性是什么意思| cno什么意思| 为什么油耳朵就有狐臭| 腋下黑是什么原因| 上不来气吃什么药好使| 为什么会有台风| 吃晕车药有什么副作用| 腿脚酸软无力是什么原因| 第一顺位是什么意思| 什么食物胆固醇含量高| 2004年属什么| 月经推后是什么原因引起| 小便次数多是什么原因| 脚气用什么| 做心电图挂什么科| 病毒感染咳嗽吃什么药效果好| 一张纸可以做什么| 吃什么减肥| ryan是什么意思| 羊水指数和羊水深度有什么区别| 吃什么可以补黄体酮| 一等功有什么待遇| 梦见吃西红柿是什么意思| 什么是恶露| 在屋顶唱着你的歌是什么歌| 呼吁是什么意思| 血糖和血脂有什么区别| 折耳猫什么颜色最贵| 肚子绞痛吃什么药| 皮下出血小红点是什么原因造成的| 五月初五是什么星座| 肌筋膜炎吃什么药| 什么是211大学| bayer是什么药| 尿葡萄糖是什么意思| 急性湿疹用什么药膏| 长脸适合什么刘海| 证监会是干什么的| 眼皮发黑是什么病症| 沙棘不能和什么一起吃| 心率变异性是什么意思| 肥猪拱门是什么生肖| 力争是什么意思| 氯中毒吃什么可以解毒| 41年属什么生肖| 匡威属于什么档次| opec是什么意思| 柯基犬为什么要断尾巴| 磷高有什么症状和危害| 小酌怡情下一句是什么| 拔牙能吃什么| 乙肝有什么明显的症状| 火车和高铁有什么区别| 周瑜是什么样的人| 什么食物含蛋白高| 三鹿奶粉现在叫什么| 后羿射日什么意思| 2月2日什么星座| 胎停了有什么症状| 脑梗是什么引起的| 鹅吃什么| 胃病烧心吃什么药好| 为什么血液是红色的| 糙米是什么米| 寿元是什么意思| 前列腺液和精液有什么区别| 高字是什么结构| 一泻千里是什么意思| afp是什么传染病| 沉香有什么作用与功效| 气管炎吃什么食物好| 帕金森病是什么病| 6月27是什么星座| 胆固醇和血脂有什么区别| 腮腺炎吃什么食物| 意味深长是什么意思| 碘是什么| 7月11日是什么日子| 老鸨什么意思| pi是什么意思| 两毛四是什么军衔| 老年痴呆吃什么药| 什么是阴阳| 习俗是什么意思| pm2.5是什么| 小孩病毒感染吃什么药| 吐气如兰是什么意思| 什么叫引流| 项韧带钙化是什么意思| 什么身子| 矗读什么| 县人武部政委什么级别| 凌晨三点是什么时辰| 英语四级什么时候报名| 一什么就| 北京的市花是什么花| 麦乳精是什么| 青霉素主治什么病| 政绩是什么意思| 头左边痛是什么原因| 什么叫蜘蛛痣| 今年什么时候暑伏| 观字五行属什么| 见什么知什么| 开什么店好| 爱出油的人身体缺什么| 霖五行属性是什么| 形而下是什么意思| 办护照带什么资料| 汗疱疹用什么药| 英语四级什么时候报名| 问诊是什么意思| 萎谢是什么意思| 胸痛是什么原因| 毫升是什么单位| 肝掌是什么原因引起的| 手机五行属什么| 嘴唇发紫什么原因| 今天是什么日子 农历| 芭乐是什么季节的水果| 狄仁杰为什么才三品| 一什么窗| 猫能看到什么颜色| 什么是社会| 婆婆是什么意思| 弓山文念什么| 过期啤酒有什么用途| 小壁虎的尾巴有什么作用| 喝羊奶有什么好处| 什么夺天工| 妈妈生日送什么礼物好| 印度信仰什么教| 血气是什么意思| 为什么总是放屁很频繁| 吃什么长个子| 君子兰叶子发黄是什么原因| 9月25日什么星座| 数目是什么意思| 随心而欲是什么意思| 七月份有什么节日| 大便白色是什么原因| 14岁属什么| 什么的粉墙| 前列腺炎有什么症状| 复姓是什么意思| 梦见小老虎是什么预兆| 天秤座男生喜欢什么样的女生| 树木什么| 巴甫洛夫的狗比喻什么| 阿司匹林什么时间吃最好| 流鼻血看病挂什么科| shiraz是什么名字红酒| 楚楚欲动是什么意思| 为什么会得口腔溃疡| 马蜂菜什么人不能吃| kpa什么意思| 物化是什么意思| 指甲发黄是什么原因| 今天是什么冲什么生肖| 为什么订婚后容易分手| 挺舌反应是什么| 梦见死人是什么兆头| b细胞淋巴肿瘤是一种什么病| dic医学上是什么意思| 吃牛肉有什么好处| 胃泌素是什么| 1.30是什么星座| 八月十一号是什么星座| 脖子红是什么原因| 大便红褐色是什么原因| 潜水是什么意思| 沧海是什么意思| mark是什么牌子| 身体缺钾是什么原因造成的| 空白是什么意思| 刘备代表什么生肖| 高中学考是什么意思| 慢性炎伴鳞化是什么意思| 药剂师是做什么的| 血糖高的人早餐吃什么好| 玉帝和王母是什么关系| 什么是偏财| 雷锋属什么生肖| 三月27号是什么星座| pickup是什么意思| 胆识是什么意思| 腰椎间盘突出不能吃什么食物| 血红蛋白低吃什么| 什么是隐血| 发改委主任什么级别| 大便出血吃什么药好得快| 单身为什么中指戴戒指| 美平是什么药| 肺结节吃什么药能散结| 6.16是什么星座| 指甲缝疼是什么原因| 鼻后滴漏吃什么药| 电磁炉上可以放什么锅| 尿结石吃什么药| 火山为什么会喷发| 智障什么意思| 百度

诸暨:应用泡沫沥青就地冷再生“四新”技术修复公路

百度   网友犀利评论:  李希刚:A罩杯  Lincurable:不仅如此啊。

setData 是小程序开发中使用最频繁、也是最容易引发性能问题的接口。

# 1. setData 的流程

setData 的过程,大致可以分成几个阶段:

  • 逻辑层虚拟 DOM 树的遍历和更新,触发组件生命周期和 observer 等;
  • 将 data 从逻辑层传输到视图层;
  • 视图层虚拟 DOM 树的更新、真实 DOM 元素的更新并触发页面渲染更新。

# 2. 数据通信

对于第 2 步,由于小程序的逻辑层和视图层是两个独立的运行环境、分属不同的线程或进程,不能直接进行数据共享,需要进行数据的序列化、跨线程/进程的数据传输、数据的反序列化,因此数据传输过程是异步的、非实时的

iOS/iPadOS/MacOS 上,数据传输是通过 evaluateJavascript 实现的,还会有额外 JS 脚本解析和执行的耗时。

数据传输的耗时与数据量的大小正相关,如果对端线程处于繁忙状态,数据会在消息队列中等待

# 3. 使用建议

# 3.1 data 应只包括渲染相关的数据

setData 应只用来进行渲染相关的数据更新。用 setData 的方式更新渲染无关的字段,会触发额外的渲染流程,或者增加传输的数据量,影响渲染耗时。

  • ? 页面或组件的 data 字段,应用来存放和页面或组件渲染相关的数据(即直接在 wxml 中出现的字段);
  • ? 页面或组件渲染间接相关的数据可以设置为「纯数据字段」,可以使用 setData 设置并使用 observers 监听变化;
  • ? 页面或组件渲染无关的数据,应挂在非 data 的字段下,如 this.userData = {userId: 'xxx'}
  • ? 避免在 data 中包含渲染无关的业务数据;
  • ? 避免使用 data 在页面或组件方法间进行数据共享
  • ? 避免滥用 纯数据字段 来保存可以使用非 data 字段保存的数据。

# 3.2 控制 setData 的频率

每次 setData 都会触发逻辑层虚拟 DOM 树的遍历和更新,也可能会导致触发一次完整的页面渲染流程。过于频繁(毫秒级)的调用 setData,会导致以下后果:

  • 逻辑层 JS 线程持续繁忙,无法正常响应用户操作的事件,也无法正常完成页面切换;
  • 视图层 JS 线程持续处于忙碌状态,逻辑层 -> 视图层通信耗时上升,视图层收到消息的延时较高,渲染出现明显延迟;
  • 视图层无法及时响应用户操作,用户滑动页面时感到明显卡顿,操作反馈延迟,用户操作事件无法及时传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层。

因此,开发者在调用 setData 时要注意:

  • ? 仅在需要进行页面内容更新时调用 setData;
  • ? 对连续的 setData 调用尽可能的进行合并
  • ? 避免不必要的 setData;
  • ? 避免以过高的频率持续调用 setData,例如毫秒级的倒计时;
  • ? 避免在 onPageScroll 回调中每次都调用 setData。

# 3.3 选择合适的 setData 范围

组件的 setData 只会引起当前组件和子组件的更新,可以降低虚拟 DOM 更新时的计算开销。

  • ? 对于需要频繁更新的页面元素(例如:秒杀倒计时),可以封装为独立的组件,在组件内进行 setData 操作。必要时可以使用 CSS contain 属性限制计算布局、样式和绘制等的范围。

# 3.4 setData 应只传发生变化的数据

setData 的数据量会影响数据拷贝和数据通讯的耗时,增加页面更新的开销,造成页面更新延迟。

  • ? setData 应只传入发生变化的字段;
  • ? 建议以数据路径形式改变数组中的某一项或对象的某个属性,如 this.setData({'array[2].message': 'newVal', 'a.b.c.d': 'newVal'}),而不是每次都更新整个对象或数组;
  • ? 不要在 setData 中偷懒一次性传所有data:this.setData(this.data)

# 3.5 控制后台态页面的 setData

由于小程序逻辑层是单线程运行的,后台态页面去 setData 也会抢占前台页面的运行资源,且后台态页面的的渲染用户是无法感知的,会产生浪费。在某些平台上,小程序渲染层各 WebView 也是共享同一个线程,后台页面的渲染和逻辑执行也会导致前台页面的卡顿。

  • ? 页面切后台后的更新操作,应尽量避免,或延迟到页面 onShow 后延迟进行;
  • ? 避免在切后台后仍进行高频的 setData,例如倒计时更新。

# 4. 性能分析

开发者可以通过组件的 setUpdatePerformanceListener 接口获取更新性能统计信息,来分析产生性能瓶颈的组件。

牛油果不能和什么一起吃 纬字五行属什么 血小板计数偏低是什么意思 维生素E什么牌子的效果最好 李时珍的皮是什么意思
husky是什么牌子 头皮疼是什么原因 驳是什么意思 尿隐血弱阳性是什么意思 全身无力吃什么药
舌苔黄厚腻是什么原因 血小板减少会出现什么症状 鸡头米什么时候上市 烘培是什么意思 小苏打是什么
3680是什么罩杯 肿瘤是什么病严重吗 埃及艳后叫什么 挑什么 骨密度是什么意思
视力模糊什么原因huizhijixie.com 抵抗力差吃什么clwhiglsz.com 附身是什么意思hcv7jop6ns8r.cn 身上没力气没劲是什么原因imcecn.com 宫颈癌吃什么好hcv8jop3ns8r.cn
西洋参泡水喝有什么功效hcv8jop7ns2r.cn 氢是什么hcv9jop4ns4r.cn 眉目传情什么意思hcv7jop9ns7r.cn 嗣女是什么意思hcv9jop3ns5r.cn 12.16是什么星座hcv7jop5ns0r.cn
荔枝都有什么品种helloaicloud.com 血压低吃什么东西好hcv8jop0ns3r.cn 陈赫开的火锅店叫什么gysmod.com 几年是什么年hcv8jop3ns6r.cn 三尖瓣关闭不全是什么意思hcv9jop5ns0r.cn
登革热是什么hcv7jop6ns1r.cn 1937年是什么年hcv7jop9ns0r.cn 小孩说话不清楚挂什么科hcv7jop5ns5r.cn 青云志是什么意思hcv9jop0ns4r.cn experiment什么意思hcv9jop3ns6r.cn
百度