前端效能JQuery篇之選擇器優化

嘉雷發表於2017-11-10

JQuery有非常多的選取節點的方法,但是採用這些方法選取節點時所影響到的效能是完全不一樣的,用更合適的選擇器去選取節點,是使用JQuery時優化瀏覽器效能的一個可考慮方向。

下面進入測試:

首先,我們的建立一個有著複雜樣式的無序列表。

<div class="test-case-content">
      <ul id="test-case" class="test">
        <li  class="item-01">Number_01</li>
        <li  class="item-02">Number_02</li>
        <li  class="item-03">Number_03</li>
        <li  class="item-04">Number_04</li>
        <li  class="item-05">Number_05</li>
        <li  class="item-06">Number_06</li>
        <li  class="item-07">Number_07</li>
        <li  class="item-08">Number_08</li>
        <li  class="item-09">Number_09</li>
      </ul>
    </div>複製程式碼
呼叫瀏覽器時間除錯工具,建立測試函式:

      function testTime(method){
        console.time('testTime');
        if(typeof method === 'function'){
          for(var i=0;i<50000;i++){
            method();
          }
        }
        console.timeEnd('testTime');
      }      
複製程式碼

我們採用選取迴圈50000次的無序列表中的一個方法,來測試每個選擇器對於瀏覽器的響應效能的影響。


1、將選擇器選取的節點快取,將大大的提升響應時間。

分別呼叫兩次方法,測試 未把節點快取 和 把節點快取 的時間。

前端效能JQuery篇之選擇器優化

調取控制檯,檢視兩種選擇器的執行時間:

前端效能JQuery篇之選擇器優化

可以發現,快取過的時間要優於未快取的兩倍以上。所以,使用合適的快取將一定程度的優化頁面響應速度


2、儘可能不使用全域性選擇器,將一定程度的提升響應時間。

分別呼叫兩次方法,測試 使用id選擇全域性選擇 的時間。

前端效能JQuery篇之選擇器優化

調取控制檯,檢視兩種選擇器的執行時間:前端效能JQuery篇之選擇器優化
可以發現,避免選擇全域性的選擇器的時間要優於全域性選擇器選取的時間,所以,選擇器的使用上,要儘量避免使用全域性選擇。


3、約束的選取條件越少,選取時間越快。

分別呼叫兩次方法,測試 詳細的選取條件下選取直接選取 的時間。

前端效能JQuery篇之選擇器優化

調取控制檯,檢視兩種選擇器的執行時間:

前端效能JQuery篇之選擇器優化

可以發現,我們不給選擇器新增條條框框,它越是能更快的找到方向。所以,在合理的情況下,可以使選取的條件約束少一點。


4、在以上的前提,越詳細層級裡的定位選擇,越會節約選擇時間。

分別呼叫兩次方法,測試 一般的選擇較詳細的選擇 的時間。

前端效能JQuery篇之選擇器優化

調取控制檯,檢視兩種選擇器的執行時間:

前端效能JQuery篇之選擇器優化

可以發現,選擇定位的層級往裡,越是詳細,越能節約時間。所以,裡面的選取條件層級越深,可以使選取條件稍微詳細一點。


5、儘量少的使用JQuery自定義的選擇器,多使用JS或CSS原生支援的選擇。

分別呼叫兩次方法,測試 JQuery自定義選取原本就支援的選擇器選取 的時間。

前端效能JQuery篇之選擇器優化

調取控制檯,檢視兩種選擇器的執行時間:

前端效能JQuery篇之選擇器優化

可以發現,JQuery自定義選擇器選取的明顯沒有原生的選擇器敏捷。所以,如果情況允許,儘量多的使用原生的選擇器選擇。



關於JQuery選擇器的效能優化方案,暫時整理到這裡,還有什麼要新增的歡迎評論留言。

程式設計有匠心,從小地方關注效能的優化,感謝你的閱讀。





相關文章