我在node.js中开发了一个Web服务器,并在此Web服务器上托管了一个Web页面(请参见图片)。 Web服务器嵌入在树莓派中,我使用带有D / A转换器的HAT来为外部电路产生电压。
在网页中可以选择,如果用户想要使用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()
}
}
但是,for循环的性能并不是最好的。有时会执行,但有时不会执行。有什么建议可以改善将参数传递给for循环吗?考虑 i 和 j 的帐户是值,而 步骤 , val_max(1) 和 forSign 是字符串变量。我将不胜感激任何反馈:)
答案 0 :(得分:1)
你使用eval()有什么特别的原因吗?除非在使用它背后有非常有效的理由,否则应该避免使用它。
首先,如果您使用eval()进行算术表达式,JavaScript会自动执行此操作。不用使用eval()。
其次,eval()缺乏现代JavaScript引擎提供的缓存编译代码的性能提升。有限的ram如Pi,这将被证明是一个性能问题。