2016-06-09 31 views
0

我看到它的方式,對於某些情況,如果某些值等於某個值,則有兩種方法可以執行操作:交換機或對象查找。交換機與對象查找性能(因爲jsperf處於關閉狀態)

使用switch:

var value = ["Hello", "hi", "bYe", "die"][Math.floor(Math.random() * (4))]; 
 

 
switch (value.toLowerCase()) { 
 
    case "hello": 
 
    alert(value + "\n\n" + "hi"); 
 
    break; 
 
    case "hi": 
 
    alert(value + "\n\n" + "hello"); 
 
    break; 
 
    case "bye": 
 
    alert(value + "\n\n" + "no"); 
 
    break; 
 
    case "die": 
 
    alert(value + "\n\n" + "you shot me"); 
 
    break; 
 
}

使用對象查找:

var value = ["Hello", "hi", "bYe", "die"][Math.floor(Math.random() * (4))]; 
 

 
var LOOKUP = { 
 
    "hello": function(v) { 
 
    alert(v + "\n\n" + "hi"); 
 
    }, 
 
    "hi": function(v) { 
 
    alert(v + "\n\n" + "hello"); 
 
    }, 
 
    "bye": function(v) { 
 
    alert(v + "\n\n" + "no"); 
 
    }, 
 
    "die": function(v) { 
 
    alert(v + "\n\n" + "you shot me"); 
 
    }, 
 
}; 
 

 
LOOKUP[value.toLowerCase()](value);

我想知道,這將有BETT呃表現?

這兩種方法都會有什麼不明顯的問題/疑難問題嗎?

+0

還有其他的方法比jsperf剖析代碼:https://developers.google.com/web/tools/chrome-devtools/profile/或寫一個簡單的腳本節點。 –

回答

0

查找表要快得多。

我剛纔回到同一個問題。如果jsperf得到恢復,這是鏈接。 https://jsperf.com/if-switch-lookup-table/10

編輯:工作基準http://jsben.ch/#/3aYtW

+0

你的標題不是錯誤的方式嗎?開關看起來像查找,反之亦然? – thevangelist

+0

事實上,這似乎是一個錯誤的答案,查找速度較慢 – thevangelist

+0

'至少在OSX上的最新版本的Chrome和Safari上,'switch'確實速度更快,我想這同樣適用於所有甚至有些現代的瀏覽器。 – Esko

相關問題