2017-08-05 93 views
1

我在node.js和此Web服務器上託管的網頁(請參見圖片)中開發了一個Web服務器。 Web服務器被嵌入到樹莓派中,並且我使用了一個帶D/A轉換器的HAT,以便爲外部電路產生電壓。在node.js中改進嵌套for循環的性能

Webpage section

在網頁可以被選擇,如果用戶想要使用一個信道或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循環嗎?考慮到一個帳戶Ĵ是值,而步驟val_max(1)forSign是字符串變量。我會很感激任何反饋:)

+0

代碼應該做什麼? –

+1

我不會在for循環中使用eval。這將會導致性能下降。 eval函數通常比替代函數慢,因爲它必須調用JS解釋器,而許多其他構造則由現代JS引擎進行優化。 –

+0

請不要使用eval ... – Cristy

回答

1

是否有任何特定原因您使用eval()?除非使用它的背後有一個非常有效的理由,否則應該避免。首先,如果您使用eval()作爲算術表達式,JavaScript會自動執行此操作。不用使用eval()。其次,eval()缺乏現代JavaScript引擎提供的高速緩存編譯代碼的性能提升。由於像Pi這樣有限的內存,這將被證明是一個性能問題。