搜尋
首頁web前端js教程做好七件事幫你提升jQuery的效能_jquery

1. Append Outside of Loops

凡是觸及DOM都是有代價的。如果你在DOM當中附加大量的元素,你會想一次將它們全部附加進來,而不是分多次進行。當在循環當中附加元素就會產生一個常見的問題。

複製程式碼 程式碼如下:

$.each( myArray, function( i, item unction) {
    var newListItem = "
  • " item "
  • ";
        $( "#ballers" ).append( newListItem );
    });
    ); >

    一個常用的技巧是利用文件片段(document fragment)。在循環的每一次迭代當中,將元素附加到片段而不是DOM元素當中。當循環結束後,將片段附加到DOM元素當中即可。

    複製程式碼 程式碼如下:

    var frag = document.createDocumentFment(); $.each( myArray, function( i, item ) {

        var newListItem = document.createElement( "li" );

        var itemText = document.createTextNode( item );

        newListItem.appendChild( itemText );

        frag.appendChild( newListItem );

    });

    $( "#ballers" )[ 0 ].appendChild( frag );


    另一個簡單的技巧是在循環的每次迭代當中,持續建立一個字串。當循環結束後,將DOM元素的HTML設定成該字串。

    複製程式碼 程式碼如下:
    var myHtml = "";

    var myHml = "";

    $.each( myArray, function( i, item ) {

        myHtml = "

  • " item "
  • ";

    });

    $( "#ballers" ).html( myHtml );

    當然還有其它一些技巧可以供你嘗試。一個名為 jsperf 的網站為測試這些效能提供了一個好的出路。該網站允許你使用基準測試每一個技巧,並將其跨平台的效能測試結果視覺化的展現出來。

    2. Cache Length During Loops

    在for迴圈當中,不要每次都存取陣列的 length 屬性;應事先將其快取起來。

    複製程式碼
    程式碼如下:

    var myLength = myAr.

    for ( var i = 0; i     // do stuff


    }

    3. Detach Elements to Work with Them

    操作DOM是緩慢的,因此你想盡可能減少對齊進行操作。 jQuery在1.4版本當中引入了名為 detach() 的方法來幫助解決這個問題,它允許你在對元素進行操作時,將它們從DOM當中分離出來。

    程式碼如下:


    var $table = $( "#myTable" ); var $parent = $table.parent();

    $table.detach();

    // ... add lots and lots of rows to table


    $parent.append( $table );

    4. Don't Act on Absent Elements

    如果你正打算在一個空的選擇器上運行大量的程式碼,jQuery並不會給予任何的提示 -- 它將繼續的執行,就像是沒有發生任何的錯誤。必須由你來驗證選擇器包含了多少元素。

    程式碼如下:


    // Bad: This runs three functions before fee >// realizes there's nothing in the selection
    $( "#nosuchthing" ).slideUp();

    // Better:
    var $mySelection = $( "#nosuchthing" );

    if ( $mySelection.length ) {

        $mySelection.slideUp();

    }

    // Best: Add a doOnce plugin.
    jQuery.fn.doOnce = function( func ) {

        this.length && func.apply( this );

        return this;

    }

    $( "li.cartitems" ).doOnce(function() {

        // make it ajax! o/

    });

    本指南特別適用於那些當選擇器不包含元素時還需要大量的開銷的 jQuery UI 部件。

    5. Optimize Selectors

    選擇器的最佳化和過去比起來並不是那麼的重要,因為許多瀏覽器都實作了 document.querySelectorAll() 方法並且jQuery將選擇器的負擔轉移到了瀏覽器上面。但仍然有一些技巧需要銘記在心。

    基於ID的選擇器

    以一個ID作為選擇器的開始總是最好的。

    複製程式碼 程式碼如下:

     // Fast:


     // Fast:
    div.robotarm" );
     // Super-fast: $( "#container" ).find( "div.robotarm" );

    採用.find() 方法的方式將更加的快速,因為第一個選擇器已經過處理,而無需通過嘈雜的選擇器引擎-- ID-Only的選擇器已使用document.getElementById() 方法進行處理,之所以快速,是因為它是瀏覽器的原生方法。

    特異性

    盡量詳細的描述選擇器的右側,對於左側則應反其道而行。 複製程式碼

    程式碼如下:


     // Unoptimized:<. data .gonzalez>
     // Optimized:
     $( ".data td.gonzalez" );

    盡量在選擇器的最右側使用 tag.class 的形式來描述選擇器,而在左側則盡量只使用 tag 或 .class 。

    避免過度使用特異性

    複製程式碼
    程式碼如下:


     $( ".data table.>

     $attees table. );
     // Better: Drop the middle if possible.

     $( ".data td.gonzalez" );

    去討好「DOM」總是有利於提升選擇器的效能,因為選擇器引擎在搜尋元素時無需進行太多的遍歷。

    避免使用通用選擇器

    如果一個選擇器明確或暗示它能在不確定的範圍內進行匹配將會大大影響性能。
    複製程式碼


    程式碼如下:


     $( ".buttons > *" ); Extremely expensive.
     $( ".buttons" ).children(); // Much better.

     $( ".category :radio" ); // Implied universal selection.
     ( ".category *:radio" ); // Same thing, explicit now. $( ".category input:radio" ); // Much better.

     Use Stylesheets for Changing CSS on Many Elements

     Use Stylesheets for Changing CSS on Many Elements

     Use Stylesheets for Changing CSS on Many Elements

     Use Stylesheets for Changing CSS on Many Elements Use Stylesheets for Changing CSS on Many Elements Use Stylesheets for Changing CSS on Many Elements Use Stylesheets for Changing CSS on Many Elements Use Stylesheets for Changing CSS on Elements
    假如你使用 .css() 方法來改變超過20個元素的CSS,應考慮為頁面添加一個樣式標籤作為替代,這樣做可以提升將近60%的速度。





    複製程式碼

    代碼如下:

     // Fine for up to 20 elements thatslow : $( "a.swedberg" ).css( "color", "#0769ad" ); // Much faster: $( "")     .appendTo( "head" ); Don't Treat jQuery as a Black Box 把jQuery的源碼當成文檔,可以把它(http://bit.ly/jqsource)保存在你的收藏夾內,經常的查閱參考。
    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    jquery实现多少秒后隐藏图片jquery实现多少秒后隐藏图片Apr 20, 2022 pm 05:33 PM

    实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

    jquery怎么修改min-height样式jquery怎么修改min-height样式Apr 20, 2022 pm 12:19 PM

    修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

    axios与jquery的区别是什么axios与jquery的区别是什么Apr 20, 2022 pm 06:18 PM

    区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

    jquery怎么在body中增加元素jquery怎么在body中增加元素Apr 22, 2022 am 11:13 AM

    增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

    jquery中apply()方法怎么用jquery中apply()方法怎么用Apr 24, 2022 pm 05:35 PM

    在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

    jquery怎么删除div内所有子元素jquery怎么删除div内所有子元素Apr 21, 2022 pm 07:08 PM

    删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

    jquery on()有几个参数jquery on()有几个参数Apr 21, 2022 am 11:29 AM

    on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

    jquery怎么去掉只读属性jquery怎么去掉只读属性Apr 20, 2022 pm 07:55 PM

    去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    3 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    將Eclipse與SAP NetWeaver應用伺服器整合。

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強大的PHP整合開發環境

    MantisBT

    MantisBT

    Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

    SublimeText3 Mac版

    SublimeText3 Mac版

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