我有以下循环。长度约为1500点。但是这个snippit可能会在页面加载时被多次调用(6-7)。
buffer[xname] = [xname];
buffer[yname] = [yname];
for (var i = 0; i < rawdata.length; i++) {
buffer[xname].push( rawdata[i][0] );
buffer[yname].push( rawdata[i][1] );
}
我需要在浏览器中执行此操作(它用于在绘制数据之前调整数据)。
目前这使得浏览器非常慢。
我尝试使用setTimeout()来缓解事件循环。这可行,但需要几秒钟。
有没有办法让这个循环更快?也许是某种映射?
答案 0 :(得分:1)
您可以通过执行以下操作将循环减半:
buffer[xname] = [xname];
buffer[yname] = [yname];
var dataLength = rawdata.length;
for (var i = 0; i < dataLength / 2; i++) {
buffer[xname][i] = rawdata[i][0];
buffer[yname][i] = rawdata[i][1];
buffer[xname][dataLength - i -1] = rawdata[dataLength - i -1][0];
buffer[yname][dataLength - i -1] = rawdata[dataLength - i -1][1];
}
不确定使用推送或直接分配之间的更改是否会影响到足以使执行时间相同。
答案 1 :(得分:0)
感谢@royhowie
Why is array.push sometimes faster than array[n] = value?
如果您可以控制rawdata的来源,您可能需要考虑更改它,以便无需额外处理即可使用。