window.requestAnimationFrame()
告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行
使用requestAnimationFrame
代替setTimeout
,减少了重排
的次数,极大提高了性能。
renderList(list) {
let renderTreeData = [];
const total = list.length;
const page = 0;
const limit = 100;
const totalPage = Math.ceil(total / limit);
const render = (page) => {
if (page >= totalPage) return;
requestAnimationFrame(() => {
for (let i = page * limit; i < page * limit + limit; i++) {
const item = list[i];
if (item) {
renderTreeData.push(item);
this.treeData = renderTreeData
} else {
break;
}
}
this.$nextTick(() => {
this.$refs.tree.setCheckedKeys(this.storedCheckNodes);
});
render(page + 1);
});
};
render(page);
},