• 如何编写高效的jQuery代码


    如何编写高效的jQuery代码

    jQuery的编写原则:


    一、不要过度使用jQuery

      1. jQuery速度再快,也无法与原生的javascript方法相比,而且建立的jQuery对象包含的信息量很庞大。所以有原生方法可以使用的场合,尽量避免使用jQuery。

      例如:

    $("a").click(function(){
        alert($(this).attr("id"));
    });

      改良后↓

    $("a").click(function(){
        alert(this.id);
    });

       2. 许多jQuery方法都有两个版本,一个是供jQuery对象使用的版本,另一个是供jQuery函数使用的版本。由于后者不通过jQuery对象操作,所以相对开销较小,速度比较快。

      例如:

    var $text = $("#text");
    var $ts = $text.text();

      改良后↓

    var $text = $("#text");
    var $ts = $.text($text);

    这里是用了“$.text()”的内置函数,其他类似的还有“$.data()”等。

    二、缓存jQuery对象

      查找DOM元素实际上有不小的内存开销,使用选择器的次数应该越少越好,并且尽可能缓存选中的结果,便于以后反复使用。记住,永远不要让相同的选择器出现多次。

       例如:

    $("#top").find("p.classA");
    $("#top").find("p.classB");

      改良后↓

    var cached = $("#top");
    cached.find("p.classA");
    cached.find("p.classB");

    三、少改动DOM结构

      如果要多次改动DOM结构,就先把要改动的部分先取出来,改动完成后再放回去。这里的基本思想是在内存中建立你确实想要的东西,最后做一次最有效的更新DOM操作。

      例如:

    var top_100_list = [...], // 这里是100个字符串的数组  
    $mylist = $("#mylist"); 
    for (var i=0, l=top_100_list.length; i<l; i++){
        $mylist.append("<li>" + top_100_list[i] + "</li>"); // 100次DOM操作
    } 

      改良后↓

    复制代码
    var top_100_list = [...],
    $mylist = $("#mylist"),
    top_100_li = ""; // 这个变量用来存储变化的字符串
    for (var i=0, l=top_100_list.length; i<l; i++){
        top_100_li += "<li>" + top_100_list[i] + "</li>";
    } 
    $mylist.html(top_100_li);// DOM操作只有这么一次 
    复制代码

     

    jQuery编写技巧:


    一、选择器择优

      选择器是jQuery的基础,如何选择效率最高的选择器,先要了解各种选择器的性能差异。

      ①ID选择器和标签元素选择器:$("#ID"); $("Tag");

    jQuery内部会自动调用浏览器的原生方法(getElementById();,getElementByTagName();),所以执行速度快。

      ②类选择器:$(".Class");

    jQuery会遍历所有DOM节点查找class=Class的DOM对象,所以执行速度较慢。

      ③伪类选择器和属性选择器:$(":Type"); $("[Attribute='Value']");

    因为浏览器没有针对它们的原生方法,这两种选择器执行速度是最慢的。不过,不排除一些第三方浏览器增加了querySelector()和querySelectorAll()方法,因此会使这类选择器的性能有大幅提高。

    二、链式写法

      $("div").find("h3").eq(2).html("Hello");

    采用链式写法时,jQuery会自动缓存每一步的结果,比非链式写法(手动缓存)要快。

     

    三、高效循环

      循环总是一种比较耗时的操作,javascript原生循环方法for和while,要比jQuery的“.each()”快。并且关于for循环,以下这种写法效率最高。

    for (var i = 0, len = array.length; i < len; i++) {
      // alert(i);
    }

    先声明变量,再进行循环操作,效率远比遍历数组“for (var in arr)”高得多,也比循环取得数组长度“for (var i = 0; i < arr.length; i++)”的效率高!

    四、字符串拼接

      字符串的拼接在开发中会经常遇到,用“+=”的方式来拼接字符串的效率非常的低,我们可以利用数组的“.join()”方法。

    复制代码
    var array = [];
    
    for(var i = 0; i < 10000; i++){
        array[i] = "<input type='button' value='a'>";
    }
    
    document.getElementById("one").innerHTML = array.join("");
    复制代码

    以前我很喜欢用数组的原生的方法“.push()”,其实直接用arr[i]或者arr[arr.length]的方式要快一点,但是差别不是很大。

    五、页面加载

      尽管$(document).ready 确实很有用, 它可以在页面渲染时,其它元素还没下载完成就执行。如果你发现你的页面一直是载入中的状态,很有可能就是$(document).ready函数引起的。你可以通过将jQuery函数绑定到$(window).load 事件的方法来减少页面载入时的cpu使用率。

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

    它会在所有的html(包括<iframe>)被下载完成后执行。一些特效的功能,例如拖放,视觉特效和动画,预载入隐藏图像等等,都是适合这种技术的场合。

    ★不是每一次努力都会有收获,但是每一次收获都必须努力,这是一个不公平的不可逆转的命题★
     
    分类: web前端
    标签: htmlwebJSJQueryjavascript前端页面
  • 相关阅读:
    颠覆C#王权的“魔比斯环” — 实现AOP框架的终极利器
    使用.Net的CodeDOM技术实现语言无关的Code Wizard
    拆半查找的递归和非递归算法
    使用wxWidgets for C++从资源文件中静态装载图像
    全排列算法原理和实现
    得到第K个大的数算法研究
    用C#2.0实现网络蜘蛛(WebSpider)
    Php实现Js的escape方法
    google map 获取 地理定位
    将sqlserver表中的数据导出sql语句(转)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3679307.html
Copyright © 2020-2023  润新知