Как пропустить очень большие элементы объекта, не заставляя браузер зависать?Петля через большой объект Javascript с setTimeout
я могу легко цикл через массив с setTimeout
/setInterval
, как это:
var i = 0;
var l = arr.length;
var interval = window.setInterval(function(){
var k = 100; // process 100 items on each Timeout
var element;
while(k--) {
if (i == l) {
return clearInterval(interval);
}
element = arr[i++];
// ... work here ...
}
}, 100);
Но каковы мои варианты для очень больших объектов?
- Чтение ключей Первые
for(k in arr)
это не вариант, потому что это будет одна большая петля, которую я хочу, чтобы избежать. - Я не могу
.splice()
объект, потому что это не массив.
В настоящее время я создаю массив, подобный этому [{k: .., v:...},{k: .., v:...},{k: .., v:...},{k: .., v:...},{k: .., v:...},{k: .., v:...},{k: .., v:...},...]
, но это такая пустая трата пространства.
Определить «очень большие элементы объекта» –
Object.keys() дает вам массив имен свойств, которые вы можете перебрать. – Shilly
[Веб-рабочие] (https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) или на стороне сервера являются хорошими альтернативами для многопоточной работы. Но только в современных браузерах для веб-работников. – Mouser