Javascript 提高node.js中嵌套for循环的性能

Javascript 提高node.js中嵌套for循环的性能,javascript,node.js,performance,Javascript,Node.js,Performance,我在node.js中开发了一个web服务器,并在此web服务器上托管了一个网页(见图)。web服务器嵌入在raspberry pi中,我使用了一个带有D/a转换器的帽子,以便为外部电路生成电压 如果用户希望使用DAC的一个通道或两个通道,则可以在网页中选择。同样,斜坡生成的参数为0.0至5.0 V(增量)或5.0 V至0.0 V(递减)。这些设置以字符串形式存储在向量中,该向量使用socket.io传递给web服务器 对于选择两个通道的特定情况,程序执行嵌套循环,如下所示。其中: //i= S

我在node.js中开发了一个web服务器,并在此web服务器上托管了一个网页(见图)。web服务器嵌入在raspberry pi中,我使用了一个带有D/a转换器的帽子,以便为外部电路生成电压

如果用户希望使用DAC的一个通道或两个通道,则可以在网页中选择。同样,斜坡生成的参数为0.0至5.0 V(增量)或5.0 V至0.0 V(递减)。这些设置以字符串形式存储在向量中,该向量使用socket.io传递给web服务器

对于选择两个通道的特定情况,程序执行嵌套循环,如下所示。其中:

//i= Start Value (DAC0); val_max=Final value (DAC0); forSign="<=" or ">=" ;
//j= Start Value (DAC1); val_max=Final value (DAC1);
//incr = i='i+step' or i='i-step' --> step= Step Value (DAC0)
//incr1 = i='i+step' or i='i-step' --> step= Step Value (DAC1)

        for(i; eval(i+forSign+val_max); i=eval(incr)){

            for(j; eval(j+forSign+val_max1); j=eval(incr1)){

             execSync(com_dac.replace(/dac0/g,j).replace(/dac1/g,i));
                spawnSync("sudo",['./ads1256_test', 'adc.txt']);
                ADC_read = fs.readFileSync("adc.txt").toString()

            }
}
//i=起始值(DAC0);val_max=最终值(DAC0);forSign=“=”;
//j=起始值(DAC1);val_max=最终值(DAC1);
//incr=i='i+step'或i='i-step'->step=step值(DAC0)
//incr1=i='i+step'或i='i-step'->step=step值(DAC1)
对于(i;评估(i+forSign+val_max);i=评估(增量)){
对于(j;eval(j+forSign+val_max1);j=eval(incr1)){
execSync(com_dac.replace(/dac0/g,j).replace(/dac1/g,i));
spawnSync(“sudo”,“[”./ads1256_测试”,“adc.txt]”);
ADC_read=fs.readFileSync(“ADC.txt”).toString()
}
}

然而,for循环的性能并不是最好的。有时执行,但有时不执行。有没有改进将参数传递给for循环的建议?考虑到ij是值,而stepval_max(1)forSign是字符串变量。我非常感谢您的反馈:)

您使用eval()有什么特别的原因吗?除非在使用它背后有一个非常有效的理由,否则应该避免使用它

首先,如果对算术表达式使用eval(),JavaScript会自动执行此操作。无需使用eval()


其次,eval()缺乏现代JavaScript引擎提供的缓存编译代码的性能提升。对于有限的ram(如Pi),这将证明是一个性能问题。

代码应该做什么?我不会在for循环中使用eval。这将扼杀性能。eval函数通常也比其他函数慢,因为它必须调用JS解释器,而现代JS引擎优化了许多其他结构。请不要使用eval…我不认为这是因为
eval
。这样使用没什么不好的。对我来说,主要的性能问题可能是在周期内运行的
Sync
命令中。您不提供任何有关
ads1256_test
可执行文件以及
com_dac
值的信息。它们可能存在性能问题。