目錄
Traffic Light
首頁 web前端 js教程 優化Jquery,提升網頁載入速度_jquery

優化Jquery,提升網頁載入速度_jquery

May 16, 2016 pm 05:15 PM
jquery 載入

總是從ID選擇器開始繼承
在class前使用tag
將jquery物件快取起來
掌握強大的鍊式操作
使用子查詢
對直接的DOM操作進行限制
冒泡
消除無效查詢
延遲到$(window).load
壓縮js
全面掌握jquery庫

1. 總是從ID選擇器開始繼承

在jquery中最快的選擇器是ID選擇器. 因為它直接來自於Javascript的getElementById()方法.

複製程式碼



複製程式碼


程式碼如下:




Traffic Light h2>

  • Red

  • Yellow
  • Green

  • 像這樣選擇按鈕是低效的:

    var traffic_button = $('#content .button');

    用ID直接選擇按鈕更有效率:

    var traffic_button = $('#traffic_button'); 選擇多個元素 提到多元素選擇其實是在說DOM遍歷和循環, 這些都是比較慢的東西.為了提高性能, 最好從就近的ID開始繼承.

    var traffic_lights = $('#traffic_light input');

    2. class前使用tag 第二快的選擇器是tag選擇器($('head')). 同理,因為它來自原生的getElementsByTagName() 方法.



    複製程式碼


    程式碼如下:




    Traffic Light


    • Red

    • Yellow
    • Green
    • 總是用一個tag name來限制(修飾)class (並且不要忘記就近的ID):

      var active_light = $('#traffic_light input.on');

      注意: 在jquery中Class是最慢的選擇器. IE瀏覽器下它會遍歷所有DOM節點不管它用在那裡. 不要用用tag name來修飾ID. 下面的範例將會遍歷所有的div元素來找出id為'content'的哪一個節點: var content = $('div#content'); 用ID修飾ID也是畫蛇添足:

      var traffic_light = $('#content #traffic_light');


      3.將jquery物件快取起來 要養成將jquery物件快取進變數的習慣. 永遠不要這樣做:



      複製程式碼

      程式碼如下:

      $(#' traffic_light input.on).bind('click', function(){…});$('#traffic_light input.on).css('border', '3px dashed yellow');$ ('#traffic_light input.on).css('background-color', 'orange');$('#traffic_light input.on).fadeIn('slow'); 最好先將物件快取進一個變數然後再操作:



      複製程式碼


      程式碼如下:
      var $active_light = $('#traffic_light input.on');$active_light.bind('click', function(){…});$active_light.css('border', ' 3px dashed yellow');$active_light.css('background-color', 'orange');$active_light.fadeIn('slow');
      為了記住我們本地變數是​​jquery的封裝, 通常用一個$作為變數前綴. 記住,永遠不要讓相同的選擇器在你的程式碼裡出現多次.

      快取jquery結果,備用
      如果你打算將jquery結果物件用在程式的其它部分,或者你的function會多次執行, 那麼就將他們快取到一個全域變數中.

      定義一個全域容器來存放jquery結果, 我們就可以在其它函數引用它們:

      複製程式碼 程式碼如下:

      // 在全域範圍定義一個物件(例如: window物件)
      window.$my =
      {
      // 初始化所有可能會不只一次要使用的查詢
      head : $('head'),
      traffic_light : $('#traffic_light'),
      traffic_button : $('#traffic_button')
      };
      function do_something(unction)
      {
      // 現在你可以引用儲存的結果並操作它們
      var script = document.createElement('script');
      $my.head.append(script);
      / / 當你在函數內部操作是, 可以繼續將查詢存入全域物件中去.
      $my.cool_results = $('#some_ul li');
      $my.other_results = $('#some_table td');
      // 將全域函數作為一個普通的jquery物件去使用.
      $my.other_results.css('border-color', 'red');
      $my.traffic_light. css('border-color', 'green');
      }

      4. 掌握強大的鍊式操作

      上面的範例也可以寫成這樣:

      複製程式碼 程式碼如下:


      程式碼如下:


      var
      var $active_light = $('#traffic_light input.on');$active_light.bind('click', function(){…})
      .css('border', '3px dashed yellow'). css('background-color', 'orange')

      .fadeIn('slow'); 這樣可以寫更少的程式碼, 讓我們的js更輕量.


      5.使用子查詢

      複製程式碼


      程式碼如下:

      var $traffic_light = $('#traffic_light'),$active_light = $traffic_light.find('input.on'),

      $inactive_lights = $traffic_light.find('input. off'); 提示: 你可以用逗號分隔的方法一次宣告多個局部變數–節省位元組數

      6.對直接的DOM操作限制


      這裡的基本思想是在內存中建立你確實想要的東西,然後更新DOM .這並不是一個jQuery最佳實踐,但必須進行有效的JavaScript操作.直接的DOM操作速度很慢. 例如,你想動態的建立一組清單元素, 千萬不要這麼做:
      複製程式碼


      程式碼如下:


      var top_100_list = [...], // 假設這裡是100個獨特的字串
      $mylist = $('#mylist'); // jQuery 選擇到
        元素
      for (var i=0, l=top_100_list.length; i{       $mylist.append('
    • ' top_100_list[i] '
    • ');}
      我們應該將整套元素字串在插入進dom之前全部創建好:
      複製程式碼 程式碼如下:

      var top_100_list = [...],
      $mylist = $('#mylist'),
      top_100_li = ""; // 這個變數將用來儲存我們的清單元素
      for (var i=0, l=top_100_list.length; i{
              top_100_li = '
    • ' top_100_list[i] '
    • >}
      $mylist.html(top_100_li);

      我們在插入之前將多個元素包裹進一個單獨的父級節點會更快:

      複製程式碼 程式碼如下:
      var top_100_list = [...],
      $mylist = $('mylistlist '),
      top_100_ul = '
        ';
        for (var i=0, l=top_100_list.length; i{
              top_100_ = '
      • ' top_100_list[i] '
      • ';
        }
        top_100_ul = '
      '; //關閉無序列表
      $mylist.replaceWith(top_100_ul);

      如果你做了以上幾條還是擔心有效能問題,那麼:
      試試jquery的clone() 方法, 它會創建一個節點樹的副本, 它允許以"離線"的方式進行dom操作, 當你操作完成後再將其放回到節點樹裡.

      使用 DOM DocumentFragments. 正如jQuery作者所言, 它的性能要明顯優於直接的dom操作.

      7. 冒泡

      除非在特殊情況下, 否則每一個js事件(例如:click, mouseover, 等.)都會冒泡到父級節點. 當我們需要給多個元素調用同個函數時這點會很有用.

      代替這種效率很差的多元素事件監聽的方法就是, 你只需向它們的父節點綁定一次, 並且可以計算出哪個節點觸發了事件.

      例如, 我們要為一個擁有很多輸入框的表單綁定這樣的行為: 當輸入框被選中時為它添加一個class

      像這樣綁定事件是低效率的:


      複製程式碼 程式碼如下:$('#entryform input).bind('focus', function(){
      $(this).addClass('selected');
      }).bind('blur', function(){
      $(this).removeClass('selected');
      });


      我們需要在父級監聽獲取焦點和失去焦點的事件:


      複製程式碼 程式碼如下:$('#entryform').bind('focus', function(e) {
             var cell = $(e.target); // e.target grabs the node that triggered the event.
             cell.addClass('selected');     var cell = $(e.target);
          cell.removeClass('selected');
      });


      父級元素扮演了一個調度員的角色, 它可以基於目標元素綁定事件. 如果你發現你給很多元素綁定了同一個事件監聽, 那麼你肯定哪裡做錯了.

      8.消除無效查詢

      儘管jquery可以很優雅的處理沒有匹配元素的情況, 但它還是需要花時間去尋找. 如果你整站只有一個全局js, 那麼極有可能把所有的jquery函數塞進$(document)ready (function(){//所有你引以為傲的代碼})裡.

      只運行在頁面裡用到的函數. 大多數有效的方法就是使用行內初始化函數, 這樣你的模板就能準確的控制何時何處該執行js.

      例如, 你的"文章"頁模板, 你可能會引用如下的程式碼在body結束處:

      你的全域js庫可能會是這樣子的:

      var mylib =
      {
          article_page :
         {
             ticle 特有的jQuery函數.
            }
         } ,
         traffic_light :
        {
             init : function()
               }
         }
      }



      9. 延後到 $(window).load

      jquery對開發者來說有一個很誘人的東西, 可以把任何東西掛到$(document).ready下冒充事件. 在大多數例子中你都會發現這樣的情況. 儘管$(document).rady 確實很有用, 它可以在頁面渲染時,其它元素還沒下載完成就執行. 如果你發現你的頁面一直是載入中的狀態, 很有可能就是$( document).ready函數引起的.

      你可以透過將jquery函數綁定到$(window).load 事件的方法來減少頁面載入時的cpu使用率. 它會在所有的html(包括

      $(window).load(function(){

      // 頁面完全載入後才初始化的jQuery函數.

      });

      多餘的功能例如拖放, 視覺特效和動畫, 預載入隱藏影像,等等. 都是適合這種技術的場合.

      本網站聲明
      本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

      熱AI工具

      Undresser.AI Undress

      Undresser.AI Undress

      人工智慧驅動的應用程序,用於創建逼真的裸體照片

      AI Clothes Remover

      AI Clothes Remover

      用於從照片中去除衣服的線上人工智慧工具。

      Undress AI Tool

      Undress AI Tool

      免費脫衣圖片

      Clothoff.io

      Clothoff.io

      AI脫衣器

      Video Face Swap

      Video Face Swap

      使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

      熱工具

      記事本++7.3.1

      記事本++7.3.1

      好用且免費的程式碼編輯器

      SublimeText3漢化版

      SublimeText3漢化版

      中文版,非常好用

      禪工作室 13.0.1

      禪工作室 13.0.1

      強大的PHP整合開發環境

      Dreamweaver CS6

      Dreamweaver CS6

      視覺化網頁開發工具

      SublimeText3 Mac版

      SublimeText3 Mac版

      神級程式碼編輯軟體(SublimeText3)

      jQuery引用方法詳解:快速上手指南 jQuery引用方法詳解:快速上手指南 Feb 27, 2024 pm 06:45 PM

      jQuery引用方法詳解:快速上手指南jQuery是一個受歡迎的JavaScript庫,被廣泛用於網站開發中,它簡化了JavaScript編程,並為開發者提供了豐富的功能和特性。本文將詳細介紹jQuery的引用方法,並提供具體的程式碼範例,幫助讀者快速上手。引入jQuery首先,我們需要在HTML檔案中引入jQuery函式庫。可以透過CDN連結的方式引入,也可以下載

      jQuery中如何使用PUT請求方式? jQuery中如何使用PUT請求方式? Feb 28, 2024 pm 03:12 PM

      jQuery中如何使用PUT請求方式?在jQuery中,發送PUT請求的方法與發送其他類型的請求類似,但需要注意一些細節和參數設定。 PUT請求通常用於更新資源,例如更新資料庫中的資料或更新伺服器上的檔案。以下是在jQuery中使用PUT請求方式的具體程式碼範例。首先,確保引入了jQuery庫文件,然後可以透過以下方式發送PUT請求:$.ajax({u

      jQuery如何移除元素的height屬性? jQuery如何移除元素的height屬性? Feb 28, 2024 am 08:39 AM

      jQuery如何移除元素的height屬性?在前端開發中,經常會遇到需要操作元素的高度屬性的需求。有時候,我們可能需要動態改變元素的高度,而有時候又需要移除元素的高度屬性。本文將介紹如何使用jQuery來移除元素的高度屬性,並提供具體的程式碼範例。在使用jQuery操作高度屬性之前,我們首先需要了解CSS中的height屬性。 height屬性用於設定元素的高度

      jQuery小技巧:快速修改頁面所有a標籤的文本 jQuery小技巧:快速修改頁面所有a標籤的文本 Feb 28, 2024 pm 09:06 PM

      標題:jQuery小技巧:快速修改頁面所有a標籤的文字在網頁開發中,我們經常需要對頁面中的元素進行修改和操作。使用jQuery時,有時候需要一次修改頁面中所有a標籤的文字內容,這樣可以節省時間和精力。以下將介紹如何使用jQuery快速修改頁面所有a標籤的文本,同時給出具體的程式碼範例。首先,我們需要引入jQuery庫文件,確保在頁面中引入了以下程式碼:&lt

      使用jQuery修改所有a標籤的文字內容 使用jQuery修改所有a標籤的文字內容 Feb 28, 2024 pm 05:42 PM

      標題:使用jQuery修改所有a標籤的文字內容jQuery是一款受歡迎的JavaScript庫,被廣泛用於處理DOM操作。在網頁開發中,經常會遇到需要修改頁面上連結標籤(a標籤)的文字內容的需求。本文將介紹如何使用jQuery來實現這個目標,並提供具體的程式碼範例。首先,我們需要在頁面中引入jQuery庫。在HTML檔案中加入以下程式碼:

      了解jQuery中eq的作用及應用場景 了解jQuery中eq的作用及應用場景 Feb 28, 2024 pm 01:15 PM

      jQuery是一種流行的JavaScript庫,被廣泛用於處理網頁中的DOM操作和事件處理。在jQuery中,eq()方法是用來選擇指定索引位置的元素的方法,具體使用方法和應用場景如下。在jQuery中,eq()方法選擇指定索引位置的元素。索引位置從0開始計數,即第一個元素的索引是0,第二個元素的索引是1,依此類推。 eq()方法的語法如下:$("s

      如何判斷jQuery元素是否具有特定屬性? 如何判斷jQuery元素是否具有特定屬性? Feb 29, 2024 am 09:03 AM

      如何判斷jQuery元素是否具有特定屬性?在使用jQuery操作DOM元素時,常會遇到需要判斷元素是否具有某個特定屬性的情況。在這種情況下,我們可以藉助jQuery提供的方法來輕鬆實現這項功能。以下將介紹兩種常用的方法來判斷一個jQuery元素是否具有特定屬性,並附上具體的程式碼範例。方法一:使用attr()方法和typeof運算子//判斷元素是否具有特定屬

      使用jQuery為表格新增一行的方法介紹 使用jQuery為表格新增一行的方法介紹 Feb 29, 2024 am 08:12 AM

      jQuery是一個受歡迎的JavaScript函式庫,廣泛用於網頁開發。在網頁開發過程中,經常需要透過JavaScript動態地在表格中新增一行。本文將介紹如何使用jQuery為表格新增一行,並提供具體的程式碼範例。首先,我們需要在HTML頁面中引入jQuery函式庫。可以透過以下程式碼在標籤中引入jQuery庫:

      See all articles