问题描述
限制函数被频繁调用,如短时间内往页面中大量添加DOM节点,会让浏览器吃不消,往往会看到浏览器假死。
解决方案
分时函数,分批进行,比如把1秒钟1000次节点创建,改为每隔200ms创建8个节点。
TimeChunk代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
</body>
<script>
/**
timeChunk,接受4个参数,第一个是创建节点时需要用到的数据,第二个参数是封装了创建节点函数的逻辑,第三个参数是表示每一批创建的节点数量,
第四个参数是想要每隔多长ms时间执行。
*/
const arr = [];
for (let i = 0; i < 1000; i++) {
arr.push(i);
}
function timeChunk(arr, fn, limit=1, interval=200) {
let obj;
let start = function() {
for (let i = 0; i < Math.min(arr.length, limit); i++) {
obj = arr.shift();
fn(obj);
}
}
// 分片执行
// setTimeInterval
return function() {
let timer = null;
const me = this;
timer = setInterval(function(){
// 如果arr为空了,则处理完成
if (arr.length === 0) {
return clearInterval(timer);
}
start();
}, interval);
}
}
const renderFriendList = timeChunk(arr, function(data) {
const div = document.createElement('div');
div.innerHTML = data;
document.body.appendChild(div);
}, 8, 200);
func();
</script>
</html>