Rumah hujung hadapan web tutorial js jQuery 性能优化指南(2)_jquery

jQuery 性能优化指南(2)_jquery

May 16, 2016 pm 06:52 PM
jquery Pengoptimuman prestasi

4,对直接的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);
    注:记得以前还看过一朋友写过这样的代码:

    for (i = 0; i

        var $myList = $('#myList');

        $myList.append('This is list item ' + i);

    }

    呵呵,你应该已经看出问题所在了。既然把#mylist循环获取了1000次!!!
     

    5,冒泡
     

    除非在特殊情况下, 否则每一个js事件(例如:click, mouseover等.)都会冒泡到父级节点。
    当我们需要给多个元素调用同个函数时这点会很有用。

    代替这种效率很差的多元素事件监听的方法就是, 你只需向它们的父节点绑定一次。

    比如, 我们要为一个拥有很多输入框的表单绑定这样的行为: 当输入框被选中时为它添加一个class

    传统的做法是,直接选中input,然后绑定focus等,如下所示:

    $("#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 捕捉到触发的目标元素
        $cell.addClass("selected");
    }).bind("blur", function(e){
        var $cell = $(e.target);
        $cell.removeClass("selected");
    });
    通过在父级监听获取焦点和失去焦点的事件,对目标元素进行操作。
    在上面代码中,父级元素扮演了一个调度员的角色, 它可以基于目标元素绑定事件。
    如果你发现你给很多元素绑定了同一个事件监听, 那么现在的你肯定知道哪里做错了。
     
    同理,在Table操作时,我们也可以使用这种方式加以改进代码:
    普通的方式:

    $('#myTable td').click(function(){
        $(this).css('background', 'red');
    });
     改进方式:

    $('#myTable').click(function(e) {

         var $clicked = $(e.target);

         $clicked.css('background', 'red');

    });

    假设有100个td,在使用普通的方式的时候,你绑定了100个事件。
    在改进方式中,你只为一个元素绑定了1个事件,
    至于是100个事件的效率高,还是1个事件的效率高,相信你也能自行分辨了。
     
     

    6,推迟到 $(window).load
     

    jQuery对于开发者来说有一个很诱人的东西, 可以把任何东西挂到$(document).ready下。
    尽管$(document).rady 确实很有用, 它可以在页面渲染时,其它元素还没下载完成就执行。
    如果你发现你的页面一直是载入中的状态,很有可能就是$(document).ready函数引起的。

    你可以通过将jQuery函数绑定到$(window).load 事件的方法来减少页面载入时的cpu使用率。
    它会在所有的html(包括

    $(window).load(function(){
        // 页面完全载入后才初始化的jQuery函数.
    });

    一些特效的功能,例如拖放, 视觉特效和动画, 预载入隐藏图像等等,都是适合这种技术的场合。
     

    7,压缩JavaScript
     
    压缩和最小化你的JavaScript文件。
     
    在线压缩地址: http://dean.edwards.name/packer/
    压缩之前,请保证你的代码的规范性,否则可能失败,导致Js错误。
     
     
     
    jQuery性能优化指南(2)到此结束,指南(3)正在进行中....
     
    相信你也有你的idea,请共享出来吧。 Email : cssrain@gmail.com
     
     
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Cara menghidupkan semula rakan sepasukan
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Pengoptimuman prestasi dan teknologi pengembangan mendatar rangka kerja Go? Pengoptimuman prestasi dan teknologi pengembangan mendatar rangka kerja Go? Jun 03, 2024 pm 07:27 PM

    Pengoptimuman prestasi dan teknologi pengembangan mendatar rangka kerja Go?

    Mengoptimumkan prestasi enjin roket menggunakan C++ Mengoptimumkan prestasi enjin roket menggunakan C++ Jun 01, 2024 pm 04:14 PM

    Mengoptimumkan prestasi enjin roket menggunakan C++

    Cara untuk Pengoptimuman: Meneroka Perjalanan Peningkatan Prestasi Rangka Kerja Java Cara untuk Pengoptimuman: Meneroka Perjalanan Peningkatan Prestasi Rangka Kerja Java Jun 01, 2024 pm 07:07 PM

    Cara untuk Pengoptimuman: Meneroka Perjalanan Peningkatan Prestasi Rangka Kerja Java

    Panduan Pengoptimuman Prestasi C++: Temui rahsia untuk menjadikan kod anda lebih cekap Panduan Pengoptimuman Prestasi C++: Temui rahsia untuk menjadikan kod anda lebih cekap Jun 01, 2024 pm 05:13 PM

    Panduan Pengoptimuman Prestasi C++: Temui rahsia untuk menjadikan kod anda lebih cekap

    Apakah teknik pengoptimuman prestasi C++ lanjutan? Apakah teknik pengoptimuman prestasi C++ lanjutan? May 08, 2024 pm 09:18 PM

    Apakah teknik pengoptimuman prestasi C++ lanjutan?

    Bagaimana untuk menggunakan pemprofilan dalam Java untuk mengoptimumkan prestasi? Bagaimana untuk menggunakan pemprofilan dalam Java untuk mengoptimumkan prestasi? Jun 01, 2024 pm 02:08 PM

    Bagaimana untuk menggunakan pemprofilan dalam Java untuk mengoptimumkan prestasi?

    Apakah kaedah biasa untuk pengoptimuman prestasi program? Apakah kaedah biasa untuk pengoptimuman prestasi program? May 09, 2024 am 09:57 AM

    Apakah kaedah biasa untuk pengoptimuman prestasi program?

    Bagaimana untuk mengoptimumkan prestasi aplikasi web menggunakan C++? Bagaimana untuk mengoptimumkan prestasi aplikasi web menggunakan C++? Jun 02, 2024 pm 05:58 PM

    Bagaimana untuk mengoptimumkan prestasi aplikasi web menggunakan C++?

    See all articles