2010-06-17 90 views
3

考慮:的jQuery/JavaScript的if語句速度

var 
isIE = $.browser.msie && !$.support.opacity, 
isIE6 = isIE && $.browser.version < 7; 

哪個會更快:

if(isIE6){ doSomething(); } 
else { doSomethingElse(); } 

OR

if(!isIE6){ doSomethingElse(); } 
else { doSomething(); } 

難道他們究竟在速度方面的一樣嗎?

+2

這是爲什麼被低估了兩次?這是一個合法的編程問題,並附有相關的代碼示例。如果你不喜歡回答基本問題,那麼就繼續前進。請告訴我** faq **的哪一部分,這違反了它應該得票。 – user113716 2010-06-17 15:45:08

+0

同意 - 只能猜測有人認爲這個問題是代表嫖娼,但我賠償一個投票 – calumbrodie 2010-06-17 15:48:44

+0

@calumbrodie - 以前沒有聽說過這個詞。 :o)如果這就是他們的想法,他們的反對票對他們的意圖沒有任何效果,因爲我也給了一個補償性的投票。 – user113716 2010-06-17 16:02:40

回答

4

在1,000,000次迭代循環中給出此測試,沒有區別。

var test = true; 

var count = 1000000; 
var stop, start = new Date(); 

while(count--) { 
    if(test) ; // Change to !test 
    else ; 
} 

stop = new Date(); 

alert(stop - start); 

測試Firefox,Safari & IE8。

在系統上運行的其他進程在每個瀏覽器中執行多次測試後,返回相同的總體變化(以毫秒爲單位),而不考慮!

+0

感謝此片段,它直接進入我的片段文件夾。 btw是這種「測試速度」的方式嗎?或者是否有更高效的工具,而不需要混淆代碼。 謝謝, – adardesign 2010-06-18 13:59:45

+1

@adardesign - 嗯,這是我使用的方法,因爲我不經常這樣做。你可以用一些函數創建一個單獨的js文件來啓動和停止計時器,並顯示結果,因此代碼中唯一的混亂是函數調用。 * XIII *提到了您可以嘗試的分析器。我確定還有其他的速度測試實用程序。嘗試搜索信息的stackoverflow。如果你找不到任何東西,你可以在這裏提出一個關於javascript運行時性能測試最佳方法的問題。 – user113716 2010-06-18 17:36:46

1

我想技術上第一個可能會更快,因爲它比第二個操作更少(只是檢查值),但是說實話,你不太可能注意到差異。

1

第一個會更快,因爲它需要少一步(!操作符確實會觸發與if語句分開的操作)。

這就是說,不會有真正的區別。

0

我會說你只是測試一下。有一個profiler in Firebug還有一個在IE8

Grz,Kris。

+0

我需要學習使用它!謝謝。 – Sam 2010-06-18 08:26:21