编译成对应平台的软件后,部分手机搜索性能变得特别慢。基本上输入一个字都要停顿一下,用户体验变的特别差。(在浏览器中运行时没有这种情况 )
建议:
a. 分离搜索方法和界面渲染。(store中也有自带查询方法,感觉效果不理想)
b. 以用户使用频率最高的字段排序.
c. 适当的中断查询。( 以满足列表可见的最大条数来中断查询,如只看到15条,那就判断搜索到的数组达到时中断)
d. 尽量减少搜索方法内代码量。
e. 按字符串的位数匹配搜索
我的代码:
var pageSize = store.getPageSize(), //页面显示数据条数
tempArray = [], //临时存在查询到的值
textVal = "123", //搜索的字符串
textValLen = txt.length, //查询数组的长度
listData = cmp.getCsource().slice(0), //根据老数据生成相同新的数组(防止操作数据时有影响)
switchFlag = false; //阀门开关标识, false 默认关闭状态(这里就要用到排序的好处了
for (var i = 0; i < listData.length; i++) {
var fitem = listData[i];
if (fitem.fidentifier.substring(0,textValLen) == textVal || // 过滤条件1(获取数组字段中字符串与搜索的字符串长度相同的值来比较)
fitem.fidentifierPy.substring(0,textValLen) == textVal // 过滤条件2) {
switchFlag = true; //记录搜索到的值, true 打开阀门
tempArray.push(fitem);
} else {
if (switchFlag) { //打开阀门后,再碰到没有找到匹配的情况就结束遍历
break;
}
}
if (pageSize == tempArray.length) { //达到满足页面显示结束遍历
break;
}
}
注:
使用switchFlag阀门标识的前提条件只针对数组某一个字段查询,上面的描述如果有不正确的地方,还请大家指证出来。我会尽快改掉,让其他人少走点弯路。
友情推荐测试更改后效率:
console.time('timerName');
// 要测试执行时间的 JavaScript 代码console.timeEnd('timerName'); //这个太强大了,谁用谁喜欢