我正在寫一些jQuery代碼,它可以同時隱藏或顯示大表中的大量表列。我想知道這將是更快地使用這樣的代碼:性能與可讀性:多選擇器與jQuery/JS中的多個語句
$("selector 1, selector 2, selector 3").css("display", "none");
或代碼:
$("selector 1").css("display", "none");
$("selector 2").css("display", "none");
$("selector 3").css("display", "none");
所以我用jsperf.com to create a performance test case。因此,我確定第一種類型的代碼(使用一個具有多個選擇器的長字符串)比第二種類型的代碼(一次隱藏一列)要快53%左右。然而,我寫完它的時候,它會被邊緣不可讀,看起來像這樣:
$("#table tr *:nth-child(4), #table tr *:nth-child(5), #table tr *:nth-child(6), #table tr *:nth-child(7), #table tr *:nth-child(8), #table tr *:nth-child(9), #table tr *:nth-child(10), #table tr *:nth-child(11), #table tr *:nth-child(12)").css("display", "none");
所以我的問題是,這是jQuery的/ JS代碼大惡 - 效率低下的表現,或缺乏可讀性?我的背景是Python,所以我傾向於將可讀性看作高於性能,53%似乎並不像現實世界中的巨大下降。但另一方面,我打算一旦部署了我的JS代碼就會縮小它的大小,所以它最終不會被讀取......儘管我知道有那些可以將我的代碼返回到其原始可讀或不可讀的形式。正如你所看到的,我可以在這個主題上圍繞自己討論,而且我不打算開始辯論或討論,所以我只是在這裏發佈,以防在jQuery/JS社區。
有趣的是,在基準測試中,我發現這個方法實際上比多語句方法慢。 – GChorn 2013-04-09 06:27:28
我想你可能會測試錯誤...使用「setup」字段來定義你的初始變量,否則你也會在測試中引入數組的創建。我嘗試了一堆瀏覽器,這比多個選擇器快。 http://jsperf.com/6b11404dd2f0 – elclanrs 2013-04-09 06:35:47
奇怪的是,當我測試@ Ian的版本時沒有針對單語句與長選擇器版本進行變量設置時,他們的表現差不多。當我和你一起做的時候,速度要慢得多。但是當我直接測試你的版本與Ian的版本時,它稍微快了一點。這一切都沒有預先定義的變量。但是你是對的,在我的實際代碼中,我只能定義一次變量,如果我這樣做,那麼你的代碼的兩個代碼比多個語句的代碼要快得多。不管怎樣,謝謝! – GChorn 2013-04-09 08:35:12