问题描述
限制函数被频繁调用,如短时间内往页面中大量添加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);}}// 分片执行// setTimeIntervalreturn 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>
