jQuery性能优化与技巧

1、使用最新版本的jQuery类库

2、使用合适的选择器(以下是使用选择器的基本规则,性能自上而下依次下降)

1)$("#id")

使用id来定位DOM元素无疑是最佳提高性能的方式,因为jquery底层将直接调用本地方法document.getElementById()。

如果这个方式不能直接找到你需要的元素,那么可以考虑调用find()方法。

$("#content").find("div")

建议从最近的ID元素开始往下搜索。

2)$("p"),$("div"),$("input")

jquery将直接调用本地方法document.getElementByTagName()来定位DOM元素。

3)$(".class")

对于比较新的浏览器例如IE9,它支持本地方法document.getElementByClassName()。而对于老的浏览器,只能靠DOM搜索方式来实现,无疑对性能产生较大的影响。

4)$("[attribute=value]")

利用属性来定位DOM元素,本地javascript方法中并没有直接地实现,大多都是使用DOM搜索方式达到效果。性能不是不是非常理想。建议开发中尽量避免。

5)$(":hidden")

同上,没有直接在本地javascript方法中实现。并且jquery需要搜索每一个元素来定位这个选择器。建议不要用。如果坚持使用这种方式,请先使用ID选择器定位父元素,然后再使用该选择器。如:

$("#content").find(":hidden");

$("a.button").filter(":animated");

注意:①尽量使用ID选择器。

②尽量给选择器指定上下文。

3、缓存对象

    $(function () {
//        $("#traffic_light input.on").bind("click",function(){...});
//        $("#traffic_light input.on").css("border","1px dashed yellow");
//        $("#traffic_light input.on").css("background-color","orange");
//        $("#traffic_light input.on").fadeIn("slow");
//        以上导致的结果是:jquery会在创建每一个选择器的过程中,查找DOM,创建多个jquery对象,
//        比较好的方式如下,缓存变量并且使用链式方式更加简洁
//        var $active_light=$("#traffic_light input.on");
//        $active_light.bind("click",function(){...})
//                .css({
//                    "border":"1px dashed yellow",
//                    "background-color":"orange"
//                })
//                .fadeIn("slow");
    });
    //        如果打算在其他函数中使用jquery对象,那么可以缓存到全局环境中。
    window.$my = {
        head: $("head"),
        traffic_light: $("#traffic_light"),
        traffic_button: $("#traffic_button")
    };
    function do_something() {
//        现在你可以引用存储的结果并操作它们
        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、循环时的DOM操作

使用jquery可以很方便的添加,删除或者修改DOM节点,但是在一些循环,例如for(),while(),或者$.each()中处理节点时,注意:

    $(function () {
//        var top_100_list= []; //假设这里是100个独一无二的字符串
//        var $myList=$("#mylist");  //jquery选择到<ul>元素
//        for(var i= 0;i<top_100_list.length;i++){
//            $myList.append("<li>"+top_100_list[i]+"</li>");
//        }
//        更好的方式,尽量减少DOM操作,以下将整个元素字符串在插入DOM之前全部创建好
        var top_100_list= [];
        var $myList=$("#mylist");
        var top_100_li="";
        for(var i=0;i<top_100_list.length;i++){
            top_100_li+="<li>"+top_100_list[i]+"</li>";
        }
        $myList.html(top_100_li);
//        切莫
//        for(var i=0;i<100;i++){
//            var $myList=$("#mylist");
//            $myList.append("This is list item"+i);
//        }
    });

5、数组方式使用jquery对象

在性能方面,建议使用简单for或者while循环来处理,而不是$.each()

    $(function () {
        var array=new Array();
//        array=[]; 略...
//        使用each方法
        $.each(array,function(i){
            array[i]=i;
        });
//        使用for代替each()方法
        for(var i=0;i<array.length; i++){
            array[i]=i;
        }
    });

此外,检测长度也是一个检查jquery对象是否存在的方式。

    $(function () {
        var $content=$("#content");
        if($content){  //总是true
//            Do something
        }
        if($content.length){  //拥有元素才返回true
//            Do something
        }
    });

6、事件代理

    $(function () {
//        $("#myTable td").click(function(){
//            $(this).css("background","red");
//        });
//        以上,假设有100个td元素,在使用的时候绑定了100个事件,这将带来很负面的性能影响
//        代替这种多元素事件监听的方法就是,只需向它们的父节点绑定一次事件,然后通过event.target获取到点击的当前元素
//        $("#myTable").click(function(e){
//            var $clicked=$(e.target);
//            $clicked.css("background","red");
//        });
//        同时,在jquery1.7中提供了一个新的方式on(),将整个事件监听封装到一个便利的方法中。
        $("#myTable").on("click","td",function(){
            $(this).css("background","red");
        });
    });

7、将你的代码转换成jquery插件

;(function($){
    $.fn.youPluginName=function(){
//        You code goes here
        return this;
    }
})(jQuery);

8、使用join()来拼接字符串

也许之前一直用“+”来拼接长字符串,但现在可以使用join(),它确实有助于优化性能,尤其在长字符串处理的时候

    $(function () {
//   首先创建一个数组,然后循环,最后使用join()把数组转化为字符串
        var array = [];
        for (var i = 0; i <= 10000; i++) {
            array[i] = "<li>" + i + "</li>";
        }
        $("#list").html(array.join(‘‘));
    });

运行效果则添加了10001个li。

9、合理利用HTML5的Data属性

10、尽量使用原生javascript方法

    $(function () {
//        用来判断多选框是否被选中
//        $cr=$("#cr");
//        $cr.click(function(){
//            if($cr.is(":checked")){
//                alert("感谢您的支持!你可以继续操作!");
//            }
//        });
//        这里可以使用原生的javascript
        var $cr=$("#cr");
        var cr=$cr.get(0);
        $cr.click(function(){
            if(cr.checked){
                alert("感谢您的支持!你可以继续操作!");
            }
        });
    });

同样,类似

$(this).css("color","red");      优化成      this.style.color="red";
$("<p></p>");      优化成      $(document.createElement("p"));

11、压缩javascript

时间: 2024-11-08 13:25:50

jQuery性能优化与技巧的相关文章

jQuery 性能优化和技巧

我们将介绍在书写代码时,应该需要注意的几个性能问题,希望对于大家在书写高性能的Web应用中有所帮助. 1.使用最新版本的 jQuery 类库 jQuery 每一个新的版本都会较上一版进行 Bug 修复和一些优化,同时也会包含一些创新,所以建议使用最新版本的 jQuery 来提高性能.不过你需要注意的是,在更换版本之后,不要忘记测试你的代码,毕竟有时候不是完全向后兼容的. 2.使用合适的选择器 jQuery 提供给开发人员非常丰富的手段来使用选择器定位 DOM 元素,它是开发人员最常使用的功能,但

jQuery性能优化的38个建议

一.注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: $loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的 二.请使用一个var来定义变量 如果你使用多个变量的话,请如下方式定义: .代码如下: varpage = 0, $loading = $('#loading'), $body = $('body'); 不要给每一个变量都添

jquery 性能优化的28个建议[整理]

一.选择器性能优化建议  1.总是从#id选择器来继承这是jquery选择器的一条黄金法则.jquery选择一个元素最快的方法就是用ID来选择. $('#content').hide(); 或者从ID选择器继承来选择多个元素: $('#content p').hide(); 2. 在class前面使用tag jQuery中第二快的选择器就是tag选择器(如$(‘head’)),因为它和直接来自于原生的Javascript方 法getElementByTagName().所以最好总是用tag来修饰

jQuery性能优化指南(转载)

现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, 性能问题还是需要引起重视的. 在twitter上发现了jQuery Performance Rules这篇文章, 简单的摘译了一下: 1.总是从ID选择器开始继承2.在class前使用tag3.将jquery对象缓存起来4.掌握强大的链式操作 5.使用子查询6.对直接的DOM操作进行限制7.冒泡8

MySQL数据库性能优化的技巧和窍门

数据库表表面上存在索引和防错机制,然而一个简单的查询就会耗费很长时间.Web应用程序或许在开发环境中运行良好,但在产品环境中表现同样糟糕.如果你是个数据库管理员,你很有可能已经在某个阶段遇到上述情况.因此,本文将介绍对MySQL进行性能优化的技巧和窍门. 1.存储引擎的选择 如果数据表需要事务处理,应该考虑使用InnoDB,因为它完全符合ACID特性.如果不需要事务处理,使用默认存储引擎MyISAM是比较明智的.并且不要尝试同时使用这两个存储引擎.思考一下:在一个事务处理中,一些数据表使用Inn

jquery性能优化的十种方法

jquery性能优化的十种方法 有时候我们在书写jquery的时候,为了书写代码方便,往往忽略了程序执行过程中,给客户端带来的压力.随之而来的就是在某些低端浏览器或者低端电脑上运行速度缓慢,甚至无法运行等问题. 因此我们有必要对我们自己书写的jquery代码进行优化,以达到更快捷.更流畅的运行效果. 在这里整理了十种jquery优化的方法,如下: 1,总是从ID选择器开始继承在jQuery中最快的选择器是ID选择器,因为它直接来自于JavaScript的getElementById()方法.例如

jQuery性能优化--循环时的DOM操作

使用jQuery可以很方便的添加,删除或者修改DOM节点,但在一些循环,例如for(),while()或者$.each()中处理节点时,下边有个实例,值得注意: var top_list=[--]; //假设这里是100个字符串 $mylist=$("#mylist"); //jQuery选择器ul for(var i=0,i=top_list.length;i<1;i++){ $mylist.append("<li>" + top_list[i]

jQuery性能优化38建议---最引人注目的用户体验!

一.需要注意的是的定义jQuery当变量被添加varkeyword 然而,这并不jQuery.整个javascript开发过程,所有需要注意,一定不要将其定义为下面的示例: $loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了同样的变量名,就会郁闷至死的 二.请使用一个var来定义变量 假设你使用多个变量的话,请例如以下方式定义: .代码例如以下: varpage = 0, $loading = $('#loading'), $body = $('bo

jQuery性能优化

1,总是从ID选择器开始继承 在jQuery中最快的选择器是ID选择器,因为它直接来自于JavaScript的getElementById()方法. 例如有一段HTML代码: <div id="content"> <form method="post" action="#"> <h2>交通信号灯</h2> <ul id="traffic_light"> <li&