数据集组件写入速度优化
场景描述
在大量使用setValue将数据写入数据集组件时,由于频繁更新状态树,导致代码执行缓慢,可能出现浏览器无响应,优化后运行正常
实现思路
引入transaction,在transaction中执行setValue,在transaction执行后更新一次状态树,大大提高执行效率
实现步骤
1 引入transaction
import {transaction} from "$UI/wxsys/lib/mobx/mobx-2.6.2.umd";
2 在赋值代码外层使用transaction方法
transaction(()=>{
})
例如:UI2/mobile/work.js中的insertFunctions方法,增加了transaction,代码如下:
insertFunctions(event){
transaction(()=>{
var funcArr = event.data.data;
var self = this;
if (funcArr.length > 0) {
funcArr.forEach(function(func) {
//添加菜单目录
if(!func.hidden || func.hidden!="all"){
self.comp("funcDirData").newData();
self.comp("funcDirData").setValue("title",func.title);
self.processFuncTree(func.children);
}
})
}
//删除空目录
var self = this;
var delRows = [];
this.comp("funcDirData").each(function(options){
var rowid = options.row.fid;
var rows = self.comp("funcMenuData").find(["dirID"],[rowid]);
if(rows.length == 0)
delRows.push(options.row);
});
if(delRows.length > 0){
this.comp("funcDirData").deleteData(delRows);
}
})
}