首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解剖小程序的 setData

无处不在的 setData --- 几乎每个开发者都会用到setData,要是在复杂的页面中,写了很多的setData,然后我们会发现页面真的是延迟严重,甚至卡顿、假死。...官方在性能优化中有提到: 避免频繁的去 setData。 避免每次 setData 都传递大量新数据。 后台态页面进行 setData。 但是到底是为什么呢?...(可参考《小程序的底层框架》) 把开发者的 JS 逻辑代码放到单独的线程去运行,因为不在 Webview 线程里,所以这个环境没有 Webview 任何接口,自然开发者就没法直接操作 DOM,也就没法动态去更改界面...一般来说计算过程如下: 用JS对象模拟DOM树。 一个真正的DOM元素非常庞大,拥有很多的属性值。而其中很多的属性对于计算过程来说是不需要的,所以我们的第一步就是简化 DOM 对象。...即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立环境。

4.5K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【干货】解剖小程序的 setData

    无处不在的 setData ---- 几乎每个开发者都会用到setData,要是在复杂的页面中,写了很多的setData,然后我们会发现页面真的是延迟严重,甚至卡顿、假死。...官方在性能优化中有提到: 1.避免频繁的去 setData。 2.避免每次 setData 都传递大量新数据。 3.后台态页面进行 setData。 但是到底是为什么呢?...(可参考上期干货《小程序的底层框架》) 把开发者的 JS 逻辑代码放到单独的线程去运行,因为不在 Webview 线程里,所以这个环境没有 Webview 任何接口,自然开发者就没法直接操作 DOM,也就没法动态去更改界面...一般来说计算过程如下: 1.用JS对象模拟DOM树。 一个真正的DOM元素非常庞大,拥有很多的属性值。而其中很多的属性对于计算过程来说是不需要的,所以我们的第一步就是简化 DOM 对象。...即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立环境。

    1.9K30

    微信小程序中 setData 详解

    脚本,再通过执行 JS 脚本的形式传递到两边独立的环境 02 setData两个重要的参数 从官方文档中看到这句Page.prototype.setData(Object data, Function...引起的界面更新渲染完毕后的回调函数 为了便于理解,在小程序中创建一个 page 页面,名为setdata,如下是逻辑层 js 文件 // miniprogram/pages/setdata/setdata.js...">更改data中数据 而在逻辑层 JS // miniprogram/pages/setdata/setdata.js Page({ /** * 页面的初始数据 *.../setdata.js Page({ /** * 页面的初始数据 */ data: { person: { name: "随笔川迹", sex: "...渲染有出现延时,由于WebView的 JS 线程一直处于忙碌状态,所以,逻辑层到页面层的通信耗时上升,视图层收到的数据消息时距离发出时间已经过去了几百毫秒,渲染的结果并不是实时的 避免 setData

    2.3K10

    微信小程序 this.setData(微信小程序setstorage)

    微信小程序setData()使用: ##Page.prototype.setData(Object data, Function callback) setData 函数用于将数据从逻辑层发送到视图层...注意: 直接修改this.data,而不调用this.setData(),是无法改变当前页面的状态的,会导致数据不一致 仅支持可以JSON化的数据 单次设置的数据不能超过1024KB,尽量避免一次设置过多的数据...** * 生命周期函数--监听页面加载 */ onLoad: function (options) { } }) 在页面中显示: 在onLoad()函数中调用setData...() onReady: function () { this.setData({ value:"调用setData()修改后的值" }) }, 再次运行:...完整代码如下: //js代码 onLoad: function (options) { console.log(options); var that = this; var userid

    25.4K30

    小程序中this.setData的使用和注意事项

    前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?...test02======={{test02}} 测试 index.js...频繁的去 setData 在我们分析过的一些案例里,部分小程序会非常频繁(毫秒级)的去setData,其导致了两个后果: Android 下用户在滑动时会感觉到卡顿,操作反馈延迟严重,因为 JS...线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层; 渲染有出现延时,由于 WebView 的 JS 线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升...JS 线程, 3.

    1.1K40

    聊聊Zookeeper技术内幕之客户端与SetData请求处理

    getClientCnxnSocket(), canBeReadOnly); cnxn.start(); } 初始化过程的泳道图如下 请求处理(SetData...服务端对于SetData请求的处理,大体可以分为4大步骤,分别是请求的预处理、事务处理、事务应用和请求响应 流程逻辑大概如下所示: 预处理 I/O层接收来自客户端的请求。...对于SetData请求,因为此时已经完成了会话创建,因此按照正常的事务请求进行处理。 将请求交给ZooKeeper的PrepRequestProcessor处理器进行处理。...无论对于会话创建请求还是SetData请求,或是其他事务请求,事务处理流程都是一致的,都是由ProposalRequestProcessor处理器发起,通过Sync、Proposal和Commit三个子流程相互协作完成的

    36010

    微信小程序:setData方法详解和注意事项

    在微信小程序中经常会使用到setData函数把变量渲染到视图层,那么什么是setData呢?如何使用?注意事项有些什么?下面我们就来详细了解一下!...1 setData()方法 setData是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。...,操作反馈延迟严重,因为 JS线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层; 渲染有出现延时,由于WebView 的 JS 线程一直处于忙碌状态...evaluateJavascript脚本过程,当数据量过大时会增加脚本的编译执行时间,占用WebView JS线程。...3.后台态页面进行setData 当页面进入后台态(用户不可见),不应该继续去进行setData,后台态页面的渲染用户是无法感受的,另外后台态页面去setData也会抢占前台页面的执行。

    13.2K31

    开发微信小程序,我为什么放弃 setData,使用 upData

    小程序代码片段代码地址: https://github.com/SHERlocked... 1. setData 不方便的地方 你在使用 setData 的时候,是不是有时候觉得很难受,举个简单的例子...这就是为什么我在上线的项目中使用 wx-updata,而不是 setData 2. wx-updata 的优点 支持 setData 对象自动合并,不用写蹩脚的对象路径了 ?...Eslint 报错,可以使用 wx-updata 提供的 Empty 来代替: [1, Empty, 3] 3. wx-updata 安装 你也可以直接把 dist 目录下的 wx-updata.js...一样使用 upData 了 // app.js import { updataInit } from '....) 第二个参数一样,引起界面更新渲染完毕后的回调函数 updataInit(Page, config) Page: 页面对象,需要在 app.js 中调用; config: 若提供配置参数 { debug

    60810

    微信小程序—setData()的使用方法和注意事项

    视图层和逻辑层的数据传输,实际上通过两边提供的JavScript Core所实现,即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立的环境...test02======={{test02}} 3 测试 index.js...,因为JS线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层; 渲染有出现延时,由于WebView的JS线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升...脚本过程,当数据量过大时会增加脚本的编译执行时间,占用WebView JS线程。...3、后台态页面进行setData 当页面进入后台态(用户不可见),不应该继续去进行setData,后台态页面的渲染用户是无法感受的,另外后台态页面去setData也会抢占前台页面的执行。

    6.8K10

    微信小程序日期选择器显示当前系统年月日时分

    (utils.js)文件,作为一个模块; 模块只有通过 module.exports 或者 exports 才能对外暴露接口。...所以当你在util.js里封装的方法想要在外部使用的话,必须通过 module.exports 或者 exports 对外暴露 这就和CommonJS 模块化标准一致 ?...要引入上面默认的util.js 在调用函数时,传入new Date()参数,返回值是日期和时间 再通过setData更改Page()里面的data,动态更新页面的数据 var util = require.../utils/util.js'); // 调用函数时,传入new Date()参数,返回值是日期和时间 // 再通过setData更改Page()里面的data,动态更新页面的数据 onLoad:...this.setData({ show: true }) }, onConfirm(e) { this.setData({ show: false

    3.1K20

    微信-小程序开发基础知识笔记

    此时可以通过将页面的 setData 改为 自定义组件 中的 setData 来提升性能。 原因:自定义组件中的setData不会进行深复制。...需要使用多slot时,可以在组件js中声明启用。...( 计算属性的作用):是为了解决HTML代码中复杂的js代码(HTML代码中可以嵌套js代码),把复杂的js代码通过计算属性来解决 这是计算属性的应用??? 听着词这么厉害干这事真是大才小用了。...实现原理很简单,就是对已有的 setData 进行二次封装,在每次 setData 的时候计算出 computed 里各字段的值,这期间可以增加缓存机制,属性值没有变化的复用。...' }, }) // component.js Component({ data: { from: 'component }, behaviors: [require('behavior.js

    92410
    领券