[英]JSON like syntax vs switch statement javascript
我在http://www.jquery4u.com/javascript/shorthand-javascript-techniques/上看到了一篇文章,其中他談到了使用switch語句的另一種方法。
我在下面創建了一個片段,但我不確定為什么替代品會慢99%。
function doX(){}
function doY(){}
function doN(){}
var something = 1;
var cases = {
1: doX,
2: doY,
3: doN
};
if (cases[something]) {
cases[something]();
}
http://jsperf.com/alternateswitch
任何的想法?
“JSON”語法只是一個對象。 此外,您的比較在這里有點不公平,因為您在每個定時循環中創建一個全新的對象,這有點貴。
如果將對象創建移動到設置部分,速度差異將變為可忽略不計: http ://jsperf.com/alternateswitch/4
如果刪除if
語句,對象的速度會更快(至少對我而言): http : //jsperf.com/alternateswitch/5 。 額外的屬性查找和真實性檢查確實減慢了速度。
作者從未聲稱較短的代碼,它只是可能情況的哈希映射,實際上會更快。 顯然,當您在測試套件中運行時,陣列創建會對性能產生負面影響。 同時, switch
語句是編譯代碼。
如果您的代碼被重用,您會看到一些改進,即您保留cases
的價值; 在這個測試案例中 ,我測量了大約20-30%的差異,具體取決於哪種情況更常發生。
也就是說,除非您的代碼在緊密循環中運行,否則這樣的隔離性能測試將沒有用,因為測試用例在我的家用計算機上以每秒50M +操作的速度運行。 因此,兩者之間的差異應該基於其他因素,例如代碼清晰度,或者如果你忘記放置break;
那么switch
語句容易搞亂的事實break;
一份聲明。
switch
是非常不公平的,你要做的就是你要找的變量是第一種情況。 因此, switch
的復雜性為O(1),供您進行測試。 通常, switch
語句由編譯器/解釋器優化。 它們甚至比鏈式if-else
語句更快。 通過使用JSON
對象而不是switch
語句,您繞過了Javascript引擎優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.