[英]Odd performance of jQuery variable caching and chaining
我到處都讀到了變量緩存和鏈接jQuery函數調用對性能有好處。
但是,我遇到了這個jsperf測試 ,似乎證明了一些有趣的怪癖。
請查看以下測試案例:
情況1:不緩存
$(".myClass").css("color", "red");
$(".myClass").css("opacity", 1);
$(".myClass").css("display", "block");
情況2:鏈接
$(".myClass").css("color", "red").css("opacity", 1).css("display", "block");
情況3:對象緩存
var $myDiv = $(".myDiv");
$myDiv.css("color", "red");
$myDiv.css("opacity", 1);
$myDiv.css("display", "block");
情況4:對象緩存+鏈接
var $myDiv = $(".myClass");
$myDiv.css("color", "red").css("opacity", 1).css("display", "block");
案例5:普通jQuery
$(".myClass").css({
color: "red",
opacity: 1,
display: "block"
});
這是按測試案例排序的我的計算機(Win7 FF18)上的性能測試結果:
(這些結果與其他瀏覽器的測量結果一致。)
如您所見,測試用例1是預期中最慢的。 奇怪的是,測試用例3最快,而測試用例2、4和5也很慢。
最大的驚喜是測試用例3比測試用例4快得多。換句話說,鏈接jQuery調用大大降低了性能。
您在自己的瀏覽器中注意到了嗎?
也許這是.css()方法的好處,但就我個人而言,我認為現代Javascript引擎已經進行了特殊的代碼優化,以增強從同一根對象進行的函數調用的順序。
你怎么看?
“對象緩存”測試非常快,因為它實際上沒有做任何事情。
它使用與其他選擇器不同的選擇器: .myDiv
而不是.myClass
。 沒有.myDiv
元素,因此調用正在處理空結果集。
如果您修復了該失敗的測試 ,則得到的結果將更像您期望的那樣:重復選擇器仍然是最慢的,其他4個選項在速度上或多或少是等效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.