在JavaScript中循环通过一个巨大的数组
我得到了这个提供商的回复,那里有一个巨大的、深入的阵列 我只需要循环这个数组并做一些简单的计算,但它需要相当长的时间来处理在JavaScript中循环通过一个巨大的数组,javascript,arrays,node.js,Javascript,Arrays,Node.js,我得到了这个提供商的回复,那里有一个巨大的、深入的阵列 我只需要循环这个数组并做一些简单的计算,但它需要相当长的时间来处理 使用JavaScript的最佳实践是什么?如果您将HTML5与现代浏览器结合使用,您可以使用WebWorkers: 或者你可以使用一种自己开发的方法:进行大量计算的最佳方法是启动一个WebWorker。请记住,将大型对象传输到worker的速度很慢,因此您可能希望在worker本身中获得响应(比如启动ajax) 如果只使用一个线程,可以使用下面的方法将计算分割成更小的部分,
使用JavaScript的最佳实践是什么?如果您将HTML5与现代浏览器结合使用,您可以使用WebWorkers:
或者你可以使用一种自己开发的方法:进行大量计算的最佳方法是启动一个WebWorker。请记住,将大型对象传输到worker的速度很慢,因此您可能希望在worker本身中获得响应(比如启动ajax) 如果只使用一个线程,可以使用下面的方法将计算分割成更小的部分,但是如果单个迭代花费的时间太长,这对您没有帮助
function eachAsync(array, fn) {
return new Promise(function(resolve, reject) {
var index = 0;
function chunk() {
try {
var end = performance.now() + 20;
for(;;) {
if (index < array.length) {
var current = index++;
fn(array[current], current);
} else {
resolve();
break;
}
if (performance.now() >= end) {
schedule();
break;
}
}
} catch(e) {
reject(e);
}
}
function schedule() {
setTimeout(chunk, 10);
}
schedule();
});
}
函数eachAsync(数组,fn){
返回新承诺(功能(解决、拒绝){
var指数=0;
函数块(){
试一试{
var end=performance.now()+20;
对于(;;){
if(索引<数组长度){
var电流=指数++;
fn(阵列[当前],当前);
}否则{
解决();
打破
}
if(performance.now()>=end){
附表();
打破
}
}
}捕获(e){
拒绝(e);
}
}
功能表(){
setTimeout(块,10);
}
附表();
});
}
计算总是在某个深度的元素上进行,还是深度不同?@HunanRostomyan它是在某个深度上进行的;假设4。然后循环数组4次。。。使用一些计数器;在启动时对其进行初始化,然后将其从4减少到0。由于它被标记为node.js
,我相信OP有更多的线程选项。@SteveWellens node.js最流行的选项是什么?从我发现的情况来看,节点webworker线程
在其示例中的性能似乎不太令人印象深刻。@TuanAnhTran我不知道最流行的选项是什么。如果他们有点慢…谁在乎呢:他们在后台线程中。