复杂数组的Javascript循环与C循环

时间:2018-08-03 08:52:51

标签: javascript c node.js

我正在node.js中运行一些复杂的循环。但是我面临一个问题。循环完成所需的时间约为200-300毫秒,这非常高。如果我也将这段代码也转换为C,会有效吗?或者,还有更好的方法?我尝试使用clusteringfork()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);
                    }
                }
            }
        }

以上代码位于另一个循环中。更糟的是。

任何帮助将不胜感激。

预先感谢

2 个答案:

答案 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之间还有更多不同之处。