簡體   English   中英

JSON喜歡語法vs switch語句javascript

[英]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; 一份聲明。

  • 我相信Javascript對象是一個關聯數組,通常作為哈希表實現。 每次查找都需要一個密鑰才能通過散列函數。 哈希函數就像一個雙刀片。 對於小尺寸數據,它會比if-elseif-else慢。 但是,對於較大的數據,它將勝過普通的if-elseif-else
  • 你偏愛switch是非常不公平的,你要做的就是你要找的變量是第一種情況。 因此, switch的復雜性為O(1),供您進行測試。

通常, switch語句由編譯器/解釋器優化。 它們甚至比鏈式if-else語句更快。 通過使用JSON對象而不是switch語句,您繞過了Javascript引擎優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM