我想知道什麼是更好的方式在JavaScript我的NodeJS項目代碼,所以我這樣做:的Javascript PERF,奇怪的結果
function clas(){
}
clas.prototype.index = function(){
\t var i = 0;
\t while(i < 1000){
\t \t i++;
\t }
}
var t1 = new clas();
var f = 0;
var d1 = new Date();
while(f < 1000){
\t t1.index();
\t f++;
}
console.log("t1: "+(new Date()-d1)+"ms");
f=0;
var d2 = new Date();
while(f < 1000){
\t var t2 = new clas();
\t t2.index();
\t f++;
}
console.log("t2: "+(new Date()-d2)+"ms");
,第一第二個是相同的... 1ms和nodejs,我有t1 = 15ms和t2 = 1ms,爲什麼?爲什麼第一次比第二次需要更多的時間,因爲他沒有初始化我的課程?
只是隨機的評論,你知道這個網站嗎? http://jsperf.com/這個網站測試瀏覽器的JavaScript,但認爲在大多數情況下,獲勝的性能也適用於Node.js. – 2015-02-05 18:20:03
任何好的JITter都會優化大部分'index'的主體,因爲它顯然不會對'i'做任何事情。在循環內調用'index'應該觸發內聯。如果虛擬機足夠聰明,它會意識到內聯函數是死代碼,幾乎可以忽略整個事情。你需要在'index'中調用一些外部函數來防止這種情況。 – ssube 2015-02-05 18:21:24
'while(i <1000){i ++;}'就像'i = 1000;'帶有一些編譯器優化 – Hacketo 2015-02-05 18:38:04