精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

jQuery性能指標和調優

開發 前端
在易用性和性能之間進行折衷是值得的。但是,存在這樣一種折衷嗎?jQuery 是不是比 “一般” 的 JavaScript 慢?jQuery 是不是比其他庫慢?本文將嘗試解答這些問題。

本文的寫作靈感源自讀者關于先前一篇文章的電子郵件反饋;該郵件這樣寫道 “jQuery 在簡單的頁面上無可挑剔,但在復雜的頁面上性能極其低下。在解決性能問題之前,您必須對復雜頁面使用常規的 JavaScript。” 這立即讓我想到 “jQuery 和 JavaScript 之間的性能比較會是什么樣的?”事實上,我很少看到將 jQuery 庫與 JavaScript 或其他 JavaScript 庫進行比較的文章。我可能像大多數人一樣,僅看到用 jQuery 編寫客戶端代碼的簡易,而忽略了可能的性能問題。在我看來,在易用性和性能之間進行折衷是值得的。但是,存在這樣一種折衷嗎?jQuery 是不是比 “一般” 的 JavaScript 慢?jQuery 是不是比其他庫慢?本文將嘗試解答這些問題。

51CTO推薦專題:jQuery從入門到精通

度量 JavaScript 性能要考慮的最重要問題是執行 JavaScript 的環境。因為代碼是運行在客戶端上的,所以它的執行依賴于客戶端計算機,這使得客戶端機器成為影響性能的最重要因素。很明顯,運行 4 核 CPU 的新服務器執行代碼的速度肯定要比 400 MHz 老式處理器快。這是毫無疑問的。不過,由于您不能控制 Web 應用程序用戶用于訪問您的站點的機器,所以在度量性能時要考慮關于硬件的許多因素。

JavaScript 性能的另一個重要方面是用于運行 JavaScript 的瀏覽器,JavaScript 新手可能不容易發覺這個影響因素。每個瀏覽器內部都包含一個 JavaScript 引擎,即用于解析和執行 JavaScript 代碼并處理 Web 應用程序頁面的本機代碼。因此,JavaScript 的性能嚴重依賴于客戶端使用的瀏覽器,并且在某些情況下,您可以 控制用戶使用的瀏覽器。本文提供一些關于 JavaScript 性能的指導原則,并解釋不同瀏覽器對性能的影響。

最后,在總結 JavaScript,尤其是 jQuery 的性能之后,我將確定一些能夠改進 jQuery 代碼性能的最佳實踐,充分利用運行得最快的代碼部分,而盡量避免運行得最慢的代碼部分。在您閱讀完本文之后,“jQuery 的性能好嗎” 這個問題將得到解答,并且給我發送那封電子郵件的人也將知道他的斷言是否正確。

創建性能測試

關于性能測試的第一步是創建一個合適的性能測試。jQuery 以及其他 JavaScript 庫在代碼中扮演的最重要角色就是使用選擇查找特定頁面元素。我在最初的性能測試中就以這方面為重點。一個良好的性能測試應該真正地發揮 JavaScript 庫的全部力量,用包含數千個頁面元素的頁面測試它。應該運行所有選擇方法,讓我看到哪個選擇方法最快,哪個最慢。測試應該事先知道正確的答案,從而確定 JavaScript 庫是否正確地執行選擇方法。最后,應該顯示所有結果,并附帶所用的運行時間,讓我能夠在所有庫之間進行比較。

我差點忽略了性能測試的最重要方面:它應該是免費的。畢竟這個系列文章的不成文規則就是相互利用彼此的成果,因此我繼續發揚這種精神,在此使用一個現成的 JavaScript 庫性能測試。這個測試稱為 SlickSpeed Selectors Test(見 參考資料),它非常適合我的需求。它將 jQuery 1.2.6(撰寫本文時的最新版本)與其他 4 個流行的 JavaScript 庫(MooTools、Prototype、YUI 和 Dojo)進行比較。然后,它使用帶有數千個頁面元素的頁面運行40個選擇測試。換句話說,這是我所希望的最佳性能測試。我將在第一個性能測試分析中使用該測試。

對比JavaScript 庫的性能

對于第一個性能測試,我使用的運行環境是 2.2 GHz 處理器、2 GB RAM 和 Firefox 3.0.3(非常重要)。我在該配置下運行 5 次測試,圖 1 顯示了 5 次運行的平均結果。

圖 1. 性能測試 1 的結果

jQuery性能指標和調優

從第一次測試能夠得出什么結論?現在我們僅關注總體結果,而不是每次測試。在獲得一些總體結論之后,我將稍后在本文中關注每個測試。

◆  結論 1:YUI 慢到了極點!

對,與其他庫相比,YUI 真的很慢。仔細查看每個測試,找出為什么這個庫在選擇元素組(例如 “p, a”)時非常慢。對于要求具有很好性能的頁面而言,這個庫是最差的選擇。

◆  結論 2:Mootools、jQuery 和 Dojo 的運行時間幾乎一樣。

與其他兩個庫相比,這 3 個庫是非常快的,并且 Dojo 是它們當中最快的,而 jQuery 是最慢的。但是從全局考慮,它們之間的速度是很接近的。

◆  結論 3:這些庫之間的相對差別還是比較明顯的。

度量最快時間/最慢時間以確定速度的相對差別,您可以看到相對差別為 332%。這個差別是比較大的,這表明使用 Firefox 時選擇不同的 JavaScript 庫會對性能有影響。

但是要記住,這些結論僅基于一個瀏覽器的結果。這是基于 Firefox 3.0.3 得出的結論。現在我們進入下一小節,我將在不同的瀏覽器上運行該測試。

在不同瀏覽器上的JavaScript 性能

面對不同瀏覽器運行 JavaScript 會得出的不同結果(性能和時間都不同),許多初級 Web 程序員覺得不可思議。盡管這對初級 Web 程序員而言是個挫折(他們擔心要編寫額外的代碼來處理不同的瀏覽器),但是有經驗的 Web 程序員在 Netscape 和 Internet Explorer 的早期就知道如何處理該問題。這也是使用 JavaScript 庫的一個亮點,因為它們都謹慎處理許多或大部分瀏覽器差異。

JavaScript 速度差異的主要原因是每個瀏覽器都使用自己的 JavaScript 引擎。JavaScript 引擎是用于解析 JavaScript 并根據 Web 應用程序執行它的本機代碼。因此,JavaScript 的執行速度與底層引擎直接相關。在最近幾個月,許多瀏覽器公司越來越關注他們的瀏覽器的性能,這是有原因的。隨著某些頁面的 JavaScript 變得日益復雜,JavaScript 引擎的快慢能夠影響 Web 應用程序的響應速度。因此,當 Google 和 Firefox 等公司談論它們的 JavaScript 引擎時,它們就會談及下一代引擎的速度要快 10 倍。這對 Web 應用程序而言是很重要的,因為底層 JavaScript 引擎的速度直接導致更復雜的 Web 應用程序的出現。

現在,您知道 JavaScript 引擎是 JavaScript 執行速度的一個因素,那么讓我們在不同的瀏覽器上運行剛才在 Firefox 上運行的測試,并嘗試找出不同的引擎對 JavaScript 性能的影響。記住,這個測試與我前面在 Firefox 上運行的測試是一樣的,因此除了 JavaScript 引擎以外,其他所有東西都是相同的。圖 2 顯示了測試結果。

圖 2. 性能測試 2 的結果

jQuery性能指標和調優

看完這些測試結果之后,您首先注意到的是在這些瀏覽器中運行得到的時間差很大。在 Chrome 1.0 上運行 jQuery 需要 168 毫秒,而在 IE6 上運行需要 1728 秒。這是難以置信的時間差!jQuery 選擇方法在 IE6 上運行比在 Chrome 上運行慢 10 倍!現在,您知道為什么 Google 喜歡夸耀它的 JavaScript 引擎,以及為什么某些瀏覽器很少介紹自己的 JavaScript 引擎。這些差別還是比較大的。

您應該注意到,jQuery 在 Firefox 或一些其他瀏覽器上運行時速度排在第 3 位,而在另一些瀏覽器上排在第 1 位。事實上,這些結果表明,根據性能進行分類的話,這些庫可以分為兩組,而不管使用什么瀏覽器。Mootools、Dojo 和 jQuery 通常屬于一個組別,而 Prototype 和 YUI 屬于另一個組別,前一組要比后一組快得多。

性能測試結論

我覺得所有這些結論都需要專門花一個小節進行闡述,因為它們對 JavaScript 開發人員非常重要。我仍然嘗試總結上面的性能結果,并且沒有忘記本文是以 jQuery 為主題的。

◆ 結論 1:Mootools、jQuery 和 Dojo 在性能方面不分上下。

查看它們在所有 5 個瀏覽器上進行的測試,在求取平均值之后,您可以看到這 3 個庫的性能幾乎是一樣的。(理想情況下,我們應該調查每個瀏覽器的市場份額。但是調整這些數字很難,因為使用 JavaScript 庫的站點不一定由 “平均用戶” 訪問)。

圖 3. 測試結果的平均值(Mootools、jQuery 和 Dojo)

jQuery性能指標和調優

 


◆ 結論 2:Prototype 和 YUI 的性能很慢。

看看這兩個庫在 5 個瀏覽器中的測試結果與 jQuery 的對比。在求取它們的平均值之后,您可以發現這兩個庫的性能差別有多大。它們在任意瀏覽器中平均比 jQuery 慢 300%。

圖 4. 測試結果的平均值(jQuery、Prototype 和 YUI)

jQuery性能指標和調優

 


◆ 結論 3:如果對性能要求比較高時,選擇 Mootools、jQuery 和 Dojo 之一獲得的性能幾乎一樣。

根據以上的平均值,選擇這 3 個庫之一比選擇另外兩個庫之一能夠獲得更多的性能優勢。從在所有瀏覽器上運行得出的平均值看,它們的性能是相當的。因此,當您選擇 JavaScript 庫時,選擇這 3 個庫之一是不會錯的。

◆ 結論 4:如果對性能要求比較高時,不要選擇 Prototype 或 YUI。

如果要求 JavaScript 庫具有較高的性能,或者打算創建一個大型的 JavaScript 項目,那么就不應該選擇這兩個庫之一。這兩個庫的性能要比其他庫遜色得多。

◆ 結論 5:瀏覽器對性能的影響是 JavaScript 庫的 9 倍。

我認為這是本文所有結論中最重要的結論。您可以在特定情況下討論哪個 JavaScript 庫最快,但它最終的影響卻是很小的!對于性能而言,瀏覽器的影響比庫本身要大得多。回顧一下圖 3 和圖 4 的平均值,您可以看到 3 個最快的庫中,最慢那個(Dojo)僅比最快那個(jQuery)慢 15%。只有 15%!然而,您看看 jQuery 在最快的瀏覽器(Chrome 1.0)和最慢的瀏覽器(IE6)上運行的速度差別,這個差別竟然達到 1000%!從這兩個數字看,15% 對 1000% 而言是微不足道的。至此,關于 3 個較快的庫中哪個是最快的爭論可以停止了,因為它們對最終結果的影響是微乎其微的。

◆ 結論 6:如果 JavaScript 性能對 Web 應用程序很重要,并且您可以控制選擇什么瀏覽器,那么就選擇最快的瀏覽器!

在某些情況下,您可以控制使用什么瀏覽器訪問站點。如果能夠控制使用什么瀏覽器,那么您就是很幸運的。我就碰到這樣幸運的項目。在這種情況下,如果您擁有一個復雜的 JavaScript 應用程序,或者您認為性能很重要,那么您就應該控制用戶用于訪問 Web 應用程序的瀏覽器。這些測試已經清楚地顯示了瀏覽器的影響。如果您的 JavaScript 應用程序的訪問量很大,那么您可以告訴用戶,他們必須 使用 Chrome。

◆ 結論 7:如果您不能控制用戶使用的瀏覽器,那么要首先考慮在 IE6 上的性能。

但是,在大部分情況下,我們都無法控制用戶使用什么瀏覽器訪問我們的站點。不過,很大一部分用戶都使用 IE 6 瀏覽網頁。到目前為止的測試中,這個瀏覽器的 JavaScript 引擎是最慢的。但是由于仍然有大量用戶使用它,并且良好的 Web 設計需要 “適應最糟糕的情況”,這意味著您可以考慮根據 IE6 設計您的 JavaScript 應用程序。

#p#

jQuery 性能調優

本文的第二部分將討論如何改進 jQuery 代碼的性能。前一部分表明選擇 jQuery 作為 JavaScript 庫指向了正確的性能方向。如果您正在閱讀本文,您可能已經使用了 jQuery。但是底層庫速度快并不意味著您編寫的所有代碼都是高質量的。如果您沒有回過頭來想想應該怎么做,使用 jQuery 仍然會編寫出非常慢的代碼。

這個部分介紹一些性能調優知識,以及改進 jQuery 代碼速度的最佳實踐技巧。

技巧 #1 - 盡可能多地通過 ID 進行搜索,而不是 CLASS

在 jQuery 代碼中兩種常見的搜索技術是通過元素的 ID 進行搜索和通過元素的 CLASS 進行搜索。在使用常規 JavaScript 的 JavaScript 庫之前,通過 ID 查找頁面元素還是相當簡單的。可以使用 getElementById() 方法快速找到元素。但是如果沒有 JavaScript 庫,要查找 CLASS 會更加困難,在必要情況下,我們還通過在其 ID 中進行編碼幫助查找。使用 jQuery 時,搜索 CLASS 就像搜索頁面上的 ID 一樣簡單,因此這兩個搜索似乎是可互換的。然而實際情況并非如此。通過 ID 搜索比通過 CLASS 搜索要快得多。當通過 ID 進行搜索時,jQuery 實際上僅使用內置的 getElementById() 方法,但通過 CLASS 進行搜索時必須遍歷頁面上的所有元素,以查找匹配項。很明顯,當頁面越大并且越復雜時,通過 CLASS 進行搜索會導致響應非常慢,而通過 ID 進行搜索不會隨著頁面變大而變慢。

前面運行的 jQuery 性能測試結果支持這一數據。讓我們查看每個測試,看看需要注意 jQuery 代碼的什么地方。在這個例子中,分別看看通過 ID 和 CLASS 進行搜索時的測試結果(圖 5)。

圖 5. ID 搜索和 CLASS 搜索對比

jQuery性能指標和調優

 


這些測試是不同的,但它們得出的數據表明通過 ID 進行搜索比通過 CLASS 進行搜索快得多。這如何影響到 jQuery 代碼?在編寫搜索時,您要記住這些技巧:如果既可選擇 CLASS 又可選擇 ID,那么通常要選擇 ID。如果需要在您的代碼中搜索某些元素,一定要給它們分配 ID。

清單 1 顯示了一個實際的 jQuery 測試,您可以在您的機器上運行它對此進行驗證:

清單 1. CLASS 和 ID

  1. $(document).ready(function() {  
  2.  
  3.   console.info("Start Test");  
  4.   var d = new Date();  
  5.   console.info(d.getSeconds() + " " + d.getMilliseconds());  
  6.  
  7.   var testBody = "";  
  8.   for (var i=0; i<1000; i++)  
  9.   {  
  10.      testBody += "<div class='testable"+i+"'>";  
  11.   }  
  12.   $("body").append(testBody);  
  13.   for (var i=0; i<1000; i++)  
  14.   {  
  15.     $(".testable"+i);  
  16.   }  
  17.  
  18.   var d = new Date();  
  19.   console.info(d.getSeconds() + " " + d.getMilliseconds());  
  20.   console.time("Start ID Test");  
  21.  
  22.   testBody = "";  
  23.   for (var i=0; i<1000; i++)  
  24.   {  
  25.     testBody += "<div id='testable"+i+"'>";  
  26.   }  
  27.   $("body").append(testBody);  
  28.   for (var i=0; i<1000; i++)  
  29.   {  
  30.     $("#testable"+i);  
  31.   }  
  32.   var d = new Date();  
  33.   console.info(d.getSeconds() + " " + d.getMilliseconds());  
  34.   console.info("End Test");  
  35.   }); 

ID 測試耗時 218 毫秒,而 CLASS 測試耗時 19.9 秒!甚至在專門為該測試構建的簡單頁面上,ID 搜索也要比 CLASS 搜索快 100 倍!

技巧 #2 - 提供盡可能多的搜索信息

jQuery 提供如此多的頁面元素搜索方法,有時您難以指出哪種方法是最好的。有一條經驗是不會錯的,即為搜索參數提供盡可能多的信息。因此,假如您正在搜索帶有 “clickable” CLASS 的所有頁面元素,如果您提前知道僅有 DIV 附帶有 CLASS,那么就能提高搜索性能。所以,搜索 “div.clickable” 會更加快。圖 6 顯示了支持該技巧的結果。

圖 6. 盡可能多地提供信息

jQuery性能指標和調優

 


考慮到底層 JavaScript 代碼之后,這就不足為奇了。通過提供元素標記,與 CLASS 參數匹配的搜索元素數量將大大減少,從而將搜索性能提升至與本例中的 ID 搜索相當。

開發人員在編寫 jQuery 選擇方法時不能偷懶,盡管 jQuery 的簡單讓人產生偷懶的欲望。簡單讓您放松了警惕。搜索機制變得如此簡單,讓我們傾向于僅輸入一條信息。然而,您應該總是盡可能多地輸入信息,尤其是已知信息。清單 2 顯示了一個很好的例子。

清單 2. 提供充足的信息

  1. // Assume there are 50 of these in some giant form, and you need to validate  
  2. // these fields before they are submitted, and there are hundreds of other  
  3. // elements on the page as well  
  4. <input type=text class="notBlank">  
  5.  
  6. // the "bad" way to validate these fields  
  7. $(".notBlank").each(function(){  
  8.    if ($(this).val()=="")  
  9.       $(this).addClass("error");  
  10. });  
  11.  
  12. // the "good" way to validate these fields  
  13. $("input.notBlank").each(function(){  
  14.    if ($(this).val()=="")  
  15.       $(this).addClass("error");  
  16. });  
  17.  
  18. // the "best" way to validate these fields  
  19. $("input:text.notBlank").each(function(){  
  20.    if ($(this).val()=="")  
  21.       $(this).addClass("error");  
  22.       }); 

技巧 #3 - 緩存選擇器

最后一個性能技巧利用了幾乎所有 jQuery 選擇器都返回 jQuery 對象這個特性。這意味著在理想的情況下,您僅需要運行選擇器一次,并且能夠輕松地將所有函數連接在一起,或緩存結果供以后使用。您也不要擔心緩存,因為與總體可用內存相比,返回的對象是很小的。

清單 3 給出了一些關于如何利用緩存的例子。

清單 3. 緩存

在我的最后一個關于性能

  1. // Imagine a function that hides all the div's with a class of "hideable"   
  2. // when a button is pressed.  These DIV's might reappear later when   
  3. // working with the page,  so the button can be pressed any number of   
  4. // times, and the DIV's that have reappeared  
  5. // will again be made to be hidden.  
  6.  
  7. $("#ourHideButton").click(function(){  
  8.    $(".hideable").hide();  
  9. });  
  10.  
  11. // As you saw in the CLASS versus ID example, though, a search for   
  12. // CLASS is very inefficient  
  13. // If this button is pressed often, it could lead to a slow response  
  14. // Instead of the above example, you should write your code like this  
  15.  
  16. var hideable;  
  17.  
  18. $("#ourHideButton").click(function(){  
  19.    if (hideable)  
  20.        hideable.hide();  
  21.    else 
  22.        hideable = $(".hideable").hide();  
  23. });  
  24.  
  25. // You can cache your search in a JavaScript variable and reuse it every time  
  26. // the button is pressed.  Because jQuery almost always returns the  
  27. // jQuery object, you can save it the first time it is called for future use 

的示例代碼中,將查看我在本系列的第一篇文章中提到的小部件(見 參考資料)。這個小部件是在表的左上角上的復選框,它允許您選擇或取消選擇該列上的所有復選框。這個小部件在電子郵件應用程序中非常常見,用于選擇或取消選擇所有消息。

清單 4. 性能改進

  1. // Here is the code as I originally presented it in that article.  Let's see  
  2. // if we can improve the performance in any way from the things we learned here  
  3.  
  4. function selectAll()  
  5. {  
  6.     var checked = $("#selectall").attr("checked");  
  7.     $(".selectable").each(function(){  
  8.        var subChecked = $(this).attr("checked");  
  9.        if (subChecked != checked)  
  10.           $(this).click();  
  11.     });  
  12. }  
  13.  
  14. // Here's the improved function.  The search for the ID of "selectall" is  
  15. // OK as-is, because we saw how fast the ID search is.  
  16. // The search for the CLASS of "selectable" was not well-designed though,  
  17. // because we saw a search by CLASS is very inefficient.  
  18. // First step was improving the search by supplying as much information as we know.  
  19. // We narrowed the search to only checkboxes with the CLASS of selectable.  
  20. // This should improve our search  
  21. // Further, we can cache this search because we will only need to perform it once  
  22. // Finally, we can perform this search before the selectall checkbox is even  
  23. // checked (when the page is finished loading), so that the search is completed  
  24. // and cached before the user even uses it.  
  25. // These 3 simple performance steps gave me a 200% increase in speed when tested  
  26. // on a page with 200 rows of data.  
  27.  
  28. var selectable = $(":checkbox.selectable");  
  29. function selectAll()  
  30. {  
  31.     var checked = $("#selectall").attr("checked");  
  32.     selectable.each(function(){  
  33.        var subChecked = $(this).attr("checked");  
  34.        if (subChecked != checked)  
  35.           $(this).click();  
  36.     });  

關于性能的要點

使用 JavaScript 時,速度和性能絕對不是小問題。在現實中,創建 jQuery 的開發人員和處理瀏覽器內置 JavaScript 引擎的開發人員都非常關注性能問題。事實上,在最近 6 個月以來,瀏覽器開發的最重要問題就是 JavaScript 引擎的速度。瀏覽器開發者都致力于在下一年迅速提升 JavaScript 的執行性能,從而大大提高 jQuery 代碼和 JavaScript 引擎的速度。來自這些 “速度之戰” 的消息表明,提升 JavaScript 性能是大勢所趨。領導 jQuery 項目的 John Resig 一直都在談論他的最新 “Sizzle” 選擇引擎。他從頭編寫了一個選擇引擎,并聲稱初步結果表明它比 Firefox 要快 4 倍。這是巨大的速度提升!在我撰寫本文的最后部分時,jQuery 1.3 已經發布,并且包含了 Sizzle 選擇引擎。jQuery 聲稱,在所有瀏覽器上運行的總體結果表明選擇引擎的 1.3 版本比 1.2.6 版本的快 49%。此外,1.3 發布版在 HTML 注入(向 DOM 添加新的元素)上改進了 6 倍,在函數定位上改進了 3 倍。在我完成本文時,很多人都更新到了最新的 jQuery 發布版,這是非常令人激動的!

影響 JavaScript 性能的另一個因素是瀏覽器,如前所述,它的影響是所選的庫的 9 倍。Firefox 和 Chrome 在 “最快 JavaScript 引擎” 之戰中各有勝負,而 Safari 的參與讓競爭更加激烈。從我們上面的測試中,可以看到 Chrome 在 JavaScript 引擎性能方面遠遠超過 Firefox,但是 Firefox 3.1 將包含新的 Tracemonkey JavaScript 引擎,屆時其速度將比當前的 JavaScript 引擎 3.0 快 20 至 40 倍(這是他們聲稱的,不是我的觀點),真不可思議!

在未來一兩年內,您將看到底層 JavaScript 引擎和 JavaScript 庫的速度得到巨大改進,從而導致使用 JavaScript 的 Web 應用程序將變得更加復雜。

如果您正在決定是使用 JavaScript 庫還是自己編寫 JavaScript,那么需要考慮的另一件事情是處理和調試 JavaScript 庫所需的全部工作。最近幾年以來,有數百位用戶一直在維護庫中的每一個函數。您可能要忙到深夜,甚至筋疲力盡地編寫自己的函數。您更相信誰呢?另外,即使您能編寫出比 jQuery 庫更快的代碼,您是否想過使用 jQuery 庫能夠獲得更多的優勢?您是否為了辛苦地編寫自己的代碼而放棄使用非常便利的 jQuery 及其函數庫?自己編寫代碼不僅需要大量時間,并且還會產生更多 bug,因此我還是建議使用現成的 jQuery 庫。

我最后討論的要點可能會讓一些人沮喪,但是我們必須考慮編寫這些 jQuery 庫的程序員。他們當中的一些是最棒的,并且他們編寫的超級優秀的代碼(一般人不能編寫這樣出色的代碼)都收入到這些庫中。我承認自己遠遠不如編寫 jQuery 庫的程序員。因此,為何不利用他們的智慧?

結束語

本文從總體上討論了 jQuery 和 JavaScript 庫的性能。通過對選擇方法進行大量的測試,您看到這些庫之間的速度存在巨大的差距,并且 jQuery 是最快的庫之一。不過,即使您選擇了最快的 JavaScript 庫,還是不能解決 Web 應用程序的性能問題,因為瀏覽器對性能的影響比庫強 9 倍。如果您能夠控制用戶使用特定的 Web 瀏覽器,那么就讓他們使用最快的瀏覽器。找到能夠最快地運行您的 Web 應用程序的瀏覽器,并讓用戶通過使用它從中受益。理想情況下,讓最慢的 JavaScript 瀏覽器消失意味著出現更快的 Web 應用程序。

我還提供了關于 jQuery 性能的 3 個技巧。盡管有好幾個站點都提供了關于 jQuery 性能的技巧,但是這 3 個技巧是最有效的。3 個技巧肯定比 50 個技巧容易記住,但其他技巧也是很好的,我將在 參考資料 部分指出另外一些技巧。不過,如果您在編寫代碼時記住了這 3 個技巧,將會獲得巨大的性能提升。應該永遠記住的 3 個 jQuery 技巧是:通過 ID 搜索比通過 CLASS 搜索快 100 倍,盡可能多地提供搜索信息,以及盡量緩存選擇。

最后,我們快速查看了 jQuery 和瀏覽器的 JavaScript 引擎即將推出的改進。在我撰寫本文的結尾部分時,jQuery 1.3 已經發布了,它承諾在選擇和代碼的其他方面實現跳躍式性能改進。此外,Firefox 還承諾它的下一代 JavaScript 引擎會快 20 至 40 倍!這些跡象表明,在未來的一兩年內,JavaScript 環境會在性能上取得重大突破。在不久的將來,復雜的 Web 應用程序會日益流行,因為快速運行這些程序的條件已經成熟。

在本文結束時,我們應該回過頭來重新檢驗這句話 “jQuery 在簡單的頁面上無可挑剔,但在復雜的頁面上性能極其低下。在解決性能問題之前,您必須對復雜頁面使用常規的 JavaScript。”根據我的經驗,jQuery 的 “性能問題” 一樣出現在 “常規的 JavaScript” 中。事實上,真正影響性能的不是 jQuery 或 JavaScript,而是瀏覽器。因此我同意這樣的觀點:使用設計不良的 jQuery 代碼的復雜頁面運行在 IE6 上時會導致糟糕的性能。不過,我希望您已經了解我要闡述的思想:只要擁有良好的 jQuery 代碼、運用 3 個最重要的技巧并選擇最快的瀏覽器,那么即使運行最復雜的頁面也不會出現明顯的性能問題。

原文鏈接:http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/

【編輯推薦】

  1. 從零開始學習jQuery之萬能的選擇器
  2. 從零開始學習jQuery之你必須知道的JavaScript
  3. 分享10個超炫的jQuery網站
  4. jQuery給力插件大閱兵
  5. 18個最新最給力的jQuery教程分享
責任編輯:陳貽新 來源: IBM DeveloperWorks
相關推薦

2010-07-28 09:25:41

jQueryJavaScript性

2022-05-02 08:56:04

前端性能指標

2013-06-17 10:19:30

交換機性能交換機參數交換機

2010-09-08 11:38:27

2023-11-20 09:48:13

Linux性能指標命令

2024-09-20 08:32:21

2011-06-07 14:16:38

雙絞線

2011-07-28 14:58:49

HP ProLiant服務器

2023-12-29 15:30:41

內存存儲

2023-11-25 20:16:22

前端

2023-12-17 14:49:20

前端首屏時間

2009-12-11 15:17:35

2018-01-04 09:23:21

WEB服務器性能

2024-06-28 11:54:20

2020-10-19 08:53:08

Redis性能指標監控

2017-02-22 11:51:11

FortiGate企業級防火墻NGFW

2023-09-08 15:37:29

軟件開發性能

2018-12-04 15:27:36

網絡性能數據中心運維管理

2024-06-12 00:00:05

2021-09-08 10:42:45

前端面試性能指標
點贊
收藏

51CTO技術棧公眾號

亚洲一区 二区 三区| 精品一区二区三区四区在线| 77成人影视| 丁香六月激情综合| 国产成人精品av在线| av电影天堂一区二区在线| 看女生喷水的网站在线观看| 在线免费视频a| 亚洲欧美日本另类| 国产精品久久久亚洲一区| www.成人在线观看| 国产一二三四五| 欧美另类久久久品| 99久久婷婷国产综合精品电影√| 天堂网视频在线| 欧美一区二区三区四区五区六区| 狠狠躁夜夜躁久久躁别揉| 欧美做受69| 亚洲毛片一区二区三区| 日本一区免费看| 欧美猛男gaygay网站| 欧美丰满日韩| 手机看片国产1024| www黄色av| 最近2019好看的中文字幕免费| 蜜臀久久99精品久久久久宅男 | 黄色免费成人| 欧美午夜黄色| 污污网站免费观看| 欧美激情小视频| 91丝袜美腿高跟国产极品老师| 欧美三区四区| 青青青在线视频| 牛人盗摄一区二区三区视频| 欧美日韩国产首页| 亚洲国产一区二区三区a毛片| 暖暖视频在线免费观看| 热久久久久久久久| 2021国产精品视频| 亚洲欧美日韩综合aⅴ视频| 国产96在线亚洲| 97成人在线观看| 国产精品秘入口18禁麻豆免会员| 久久香蕉频线观| 久久久精品免费网站| 欧美一区在线观看视频| 在线免费观看中文字幕| 国产肥臀一区二区福利视频| 久久婷婷国产麻豆91天堂| 国产网站一区二区| 秋霞影院一区二区三区| 国产三区在线播放| 日本999视频| 欧美在线观看一区二区三区| 亚洲夂夂婷婷色拍ww47| 99久久.com| av网站在线免费观看| 黄色短视频在线观看| 精品乱色一区二区中文字幕| 精品久久久久久久一区二区蜜臀| 国产精品影视在线| 97色婷婷成人综合在线观看| 国产免费一区二区三区免费视频| 成年人网站大全| 热久久免费国产视频| 91电影在线观看| 日本不卡一区二区三区| 狠狠久久伊人中文字幕| 中文字幕在线一| 波多野结衣在线免费观看| 97欧洲一区二区精品免费| 精品国产一区二区三区四区四| 国产福利不卡视频| 欧美日韩一区二区三区在线电影| 色中色在线视频| 亚洲av熟女国产一区二区性色| 亚洲日本欧美在线| 欧美精品在线免费播放| 亚洲成人动漫在线观看| 日韩国产精品久久久| 国产一区二区三区黄网站| 色欲av永久无码精品无码蜜桃 | 欧洲精品二区| 天堂а√在线中文在线新版| 一区二区成人网| 亚洲精品欧美日韩| 日韩精品中文字幕有码专区| 国产农村妇女毛片精品久久麻豆| 中文字幕一区二区三区久久网站| 午夜影视一区二区三区| 国产乱色精品成人免费视频| 亚洲av人人澡人人爽人人夜夜| 亚洲国产欧美不卡在线观看| 久久乐国产精品| 正在播放亚洲一区| 久久久精品免费免费| 黄色欧美成人| 国产精品免费精品自在线观看| 久草福利在线| 好看的av在线| 扒开伸进免费视频| 欧美一区二区三区综合| 91精品久久久久久久久久另类| 精品视频久久久久久| 亚洲一区二区三区四区中文字幕| 奇米亚洲午夜久久精品| 怕怕欧美视频免费大全| av日韩中文| 姝姝窝人体www聚色窝| 久久国产露脸精品国产| 免费观看黄网站| 精品无码av无码免费专区| 成人伊人精品色xxxx视频| 久久天天躁狠狠躁夜夜av| 欧美日韩成人一区| 亚洲三级电影网站| 国产成人自拍网| 一区二区视频欧美| 色先锋久久影院av| 欧美大片免费高清观看| 国产高清在线观看| 国产又粗又大又黄| 国产精品成人aaaa在线| 99久久久久久久久久| 久久久久国产精品熟女影院| 视频一区二区三| 亚洲综合在线小说| 91国内在线视频| 日韩中文字幕在线观看| 精品国产伦一区二区三区观看方式 | 亚洲欧美电影一区二区| 蜜桃视频在线一区| 午夜久久美女| 欧美精品久久久久久| 3d动漫一区二区三区在线观看| 中文字幕在线免费| 亚洲精品一区二区口爆| 无码人妻精品一区二| 免看一级a毛片一片成人不卡| 亚洲av无码一区二区三区人 | 久久av高潮av| 日韩av在线电影观看| 91嫩草视频在线观看| 国产第一区电影| 国产69精品久久久久9| 中文字幕亚洲一区| 亚洲精品一区二三区不卡| 精品国产百合女同互慰| 91麻豆精品国产91久久久| 色综合天天综合| 欧美午夜影院在线视频| 午夜伊人狠狠久久| 亚洲婷婷在线视频| 亚洲天堂福利av| 国产精品国产三级国产普通话蜜臀 | 日韩一区二区三区在线看| 久久99久久99精品免观看软件| 菠萝菠萝蜜在线观看| 成人18在线| 视频一区二区三区不卡| 尤物视频在线免费观看| 91官网在线| av在线免费观看网站| 美女羞羞视频在线观看| 懂色一区二区三区| 在线激情免费视频| 92国产在线视频| 午夜看片在线免费| av网站免费在线观看| 日本在线视频www鲁啊鲁| 菠萝蜜视频国产在线播放| 狂野欧美性猛交xxxxx视频| 青春草在线视频| 亚洲人成午夜免电影费观看| a一区二区三区| 99精品视频在线免费播放 | 免费日本一区二区三区视频| 毛片免费不卡| 黄视频网站在线观看| 日本中文字幕一区二区| 国产午夜久久av| 色愁久久久久久| 国产精品伦理久久久久久| 很黄很黄激情成人| 视频一区中文字幕国产| 国产一区二区不卡| 久久久久免费观看| 亚洲乱码日产精品bd| 五月综合激情婷婷六月色窝| 欧美日韩国产大片| 亚洲精美色品网站| 欧美精品少妇videofree| 欧美在线视频在线播放完整版免费观看| 国产精品视频免费观看www| 波多野结衣成人在线| 一区二区在线观| 777米奇影视第四色| 国产伦精品一区二区三区精品| 日本视频在线免费| 亚洲综合图片网| 手机在线观看毛片| 男人添女人下部高潮视频在线观看| 成人国产在线| 伊人久久大香线蕉综合网站 | 精品蜜桃在线看| www.欧美免费| 成人av在线天堂| 日本黄色a视频| 91插插插影院| 色婷婷在线视频观看| 国产免费的av| 中文在线手机av| 日韩在线成人| 欧美成人亚洲| 成人精品视频网站| 亚洲自拍偷拍av| 亚洲精品成人久久电影| 日本高清不卡在线| 久久这里精品国产99丫e6| www国产黄色| 免费观看a级片| 国产精品无码久久久久成人app| 91麻豆一二三四在线| 99re6热只有精品免费观看| 亚洲夜间福利| 久久精品视频网| 欧美人伦禁忌dvd放荡欲情| 久久国产精彩视频| 精品网站在线看| 五月天亚洲视频| 手机在线免费看毛片| 污污网站免费在线观看| 成人国产精品入口免费视频| 欧美精品一卡| 国产嫩草影院久久久久| 欧美一区二区久久久| 5566日本婷婷色中文字幕97| 亚洲不卡1区| 99精品视频国产| 美女黄页在线观看| 黄色在线观看www| 亚洲精彩视频| 国产精品青草综合久久久久99| 日韩精品一区二区三区中文精品| 国产成人精品亚洲精品| 国产精品视频网站在线观看| 成年人在线免费看片| 蜜桃av噜噜一区二区三区麻豆| 成人深夜福利| 日韩国产欧美在线观看| 天天色综合天天| 欧美精品www| 人妻无码一区二区三区四区| 久久久精品成人| 国产精品一二三区视频| 欧美日韩导航| 成人99免费视频| 日韩精品视频在线播放| 国产福利不卡| 国产xxxxxxxxx| 欧美一区二区三区黄片 | 亚洲久草在线视频| 精品久久国产精品| 亚洲在线播放电影| a一级免费视频| 超碰在线最新| 伊人久久成人| 狠狠躁夜夜躁人人爽超碰91| 欧美中文在线观看国产| 97在线免费公开视频| 久久久国产免费| 国产在线一区不卡| 不卡av在线免费观看| 亚洲免费小视频| 黄频视频在线观看| 久久伊人成人网| 亚洲精品一区| 国产一区二区视频在线| 精品国产a毛片| 日本午夜精品一区二区三区| wwwav国产| 国产精品专区免费| 国产乱子轮精品视频| 亚洲第一免费网站| 亚洲国产欧美日韩| 日韩精品一区二区在线播放| 国产极品一区| 91色九色蝌蚪| 欧美高清第一页| 男人添女人下面免费视频| 黄色成人一级片| 久久亚洲国产| 一本色道a无线码一区v| 成人av片网址| av片在线免费看| 成人精品电影在线| 成人av电影在线网| 久久91亚洲人成电影网站| 美女网站视频黄色| 久久精品国产亚洲a∨麻豆| 亚洲视频精品| 日韩欧美国产一区二区三区| 一级二级三级欧美| 国产一区二区视频网站| 黄色网一区二区| 亚洲综合男人的天堂| 91日本在线观看| 永久免费看mv网站入口| 男人亚洲天堂| 亚洲视频每日更新| 91热福利电影| 国产大片中文字幕| 精品三级av| 午夜国产不卡在线观看视频| 懂色一区二区三区av片| 九九视频免费观看| 久久国产精品免费精品3p| 亚洲午夜国产一区99re久久| 成人久久18免费网站漫画| 欧美成人精品欧美一级| 九九九九九九精品任你躁| 亚洲一区二区五区| 国产日韩欧美一区二区三区四区| 天天综合天天干| 清纯唯美亚洲综合一区| 欧美一区国产二区| 日韩欧美一区三区| 久久经典视频| 国产精品18久久久| 日韩av男人的天堂| 欧美日韩免费做爰视频| 亚洲综合图色| 91精品婷婷国产综合久久性色| 精品无码国产一区二区三区av| 毛片在线播放网址| 国产精品中文欧美| 国产精品久久久久久久av大片| 欧美人妻一区二区| 成人嫩草影院| 日韩av影片在线观看| 九色91porny| 青青青国产精品| 色嗨嗨av一区二区三区| youjizz.com在线观看| 日本在线观看网站| 久久久久九九视频| 激情小说综合网| 国产喷水福利在线视频| 美女诱惑一区二区| 清纯唯美日韩制服另类| 亚洲国产成人精品激情在线| 欧美在线资源| 日韩一级裸体免费视频| 久久一级免费视频| jizzjizz欧美69巨大| 国产亚洲视频在线观看| 黑人巨大精品欧美| 亚洲传媒在线| 亚洲美女av电影| 免费a级黄色片| 国产精品亚洲二区| 国产一区二区三区丝袜| 欧美激情久久久久久久| 久久精品播放| 日韩视频在线免费| 欧美人妻精品一区二区免费看| 欧美日韩99| 久久久久久网址| 免费黄色网址在线| 欧美专区一区二区三区| 国产精品香蕉av| 国产精品一二三四五区| 激情图区综合网| 精品欧美日韩在线| 激情视频在线观看免费| 国产精品久久久久婷婷二区次| 欧美美女黄色网| 国产欧洲在线| 欧美日韩国产片| 日本黄色动态图| 久久国产电影| 97精品在线视频| 一级做a爱片久久毛片| 国产91在线|亚洲| 鲁丝一区二区三区免费| 国产剧情在线| 欧美色区777第一页| 免费a v网站| 午夜精品久久久久99热蜜桃导演| 国产成人极品视频| 图片区 小说区 区 亚洲五月| 中文字幕一区二区三区精华液 | 亚洲春色在线| www.精品| 亚洲丝袜自拍清纯另类| 免费极品av一视觉盛宴| 久久婷婷五月综合色丁香| 亚洲毛片一区二区| 丰满少妇乱子伦精品看片| 国产精品456|