我有以下循环。长度约为1500点。但是这个代码片段可能会在页面加载时被多次调用(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()来简化事件循环。这是可行的,但只需要几秒钟。
有什么方法可以让这个循环更快吗?也许是某种映射?
发布于 2015-06-03 06:44:20
您可以通过执行以下操作将循环减少到一半:
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];
}不确定使用推式或直接赋值之间的更改是否会产生足够的影响,从而使执行时间相同。
发布于 2015-06-03 06:28:16
感谢@royhowie
Why is array.push sometimes faster than array[n] = value?
如果您可以控制原始数据的来源,那么您可能需要考虑更改它,这样就可以在不进行额外处理的情况下使用它。
https://stackoverflow.com/questions/30607637
复制相似问题