我正在node.js中运行一些复杂的循环。但是我面临一个问题。循环完成所需的时间约为200-300毫秒,这非常高。如果我也将这段代码也转换为C
,会有效吗?或者,还有更好的方法?我尝试使用clustering
,fork()
,reverse loops
,但似乎没有什么大不同
一些样本数据
containers //Multidimensional 2D array on each index has array of 8 elements
类似于[ [1,2,3,4,5,6,7,8] ... ]
deleteItems= [1,2,3]
for (let indexi = 0; indexi < containers.length; indexi++) {
var shuoldRemove = false;
for (let indexj = 0; indexj < containers[indexi].length; indexj++)
{
for (let indexOfIPCPR = 0; indexOfIPCPR < deleteItems.length; indexOfIPCPR++){
if (containers[indexi][indexj] == deleteItems[indexOfIPCPR]){
shouldRemove = true;
shouldRemove && indexOfNextRound.splice(indexOfNextRound.indexOf(indexi),1);
}
}
}
}
以上代码位于另一个循环中。更糟的是。
任何帮助将不胜感激。
预先感谢
答案 0 :(得分:1)
我认为对于非常复杂的数组,可以通过缓存数组长度来提高速度。我看到您在每次迭代中都得到了长度。这就是更新循环的方式,以减少计算数组长度所需的时间。请记住,现代JS引擎会自己进行这种优化。因此,这可能什么都不会改变。
for (let indexi = 0, maxi = containers.length; indexi < maxi; indexi++) {
var shuoldRemove = false;
for (let indexj = 0, maxj = containers[indexi].length; indexj < maxj; indexj++)
{
for (let indexOfIPCPR = 0, maxDelete = deleteItems.length; indexOfIPCPR < maxDelete; indexOfIPCPR++){
if (containers[indexi][indexj] == deleteItems[indexOfIPCPR]){
shouldRemove = true;
shouldRemove && indexOfNextRound.splice(indexOfNextRound.indexOf(indexi),1);
}
}
}
}
答案 1 :(得分:1)
正如评论中所提到的,这并不是那么简单,主要取决于循环的内容。但是可能会帮助您做出决定的一些相关要点:
Node.js的事件循环是单线程的。这并不意味着所有操作都将在一个线程中运行-I / O(网络操作,写入文件等)操作具有其自己的线程,并且它们将异步运行。但是,如果您的代码没有很多I / O,它将几乎在单个线程中运行。
在C语言中,您可以根据需要创建线程并同时运行代码。但是,只有在您的代码可以同时运行 而不会在线程之间进行通信,同步它们的高昂开销的情况下,它才会更加高效。因此,如果,您可以将资源和输入数据划分为几个独立的组,然后将每个组传递给一个线程并同时运行它们,那么与之相比,在所有条件下运行它们可能会更高效。单线程。
这将是在Node.js和C中运行它的主要区别-线程化。当然,Node.js和C之间还有更多不同之处。