编写高性能的jQuery代码

jQuery Optimization

现在jQuery已经出现在很多项目中,然而许多同学忽略了他的性能问题以及代码质量问题,
下面是我对jQuery的一些性能方面的学习.

选择器

选择器是jQuery中的核心功能,选择同一个DOM元素我们可以使用不同的方法。但是哪一种是最快的呢?

  1. if possible, please use more id selector. id selector is used javascript method getElementById
    //bad
    ('#id selector')  //good('#id')

    caution: don't use tag to decorate id selector

  2. Before using class selector, you'd better add tag. that's is used javascript method getElementsByTagName
    //bad
    (.class)//good ('tag.class')

    caution: class selector is the slower selector, use less

  3. if possible, right more detail
    //bad
    (tag.class.class)//good ('.class tag.class')

  4. when you select children, you'd better use find. the best way that cache the parent.
    var parent = $('#parent');
    var children = parent.find('children');

  5. 最慢选择器:伪类选择器和属性选择器,新的浏览器增加了querySelector()和querySelectorAll()方法,可能会使这两类选择器性能提升

  6. 从父元素选择子元素
    >-  (child, parent)
    这种选择其实会执行$parent.find('child'),排名第二

    • (child, ('parent'))
      这种选择会别转成$('parent').find('child'),排名第三
    • $('#parent child')
      这种选择适合选择多级子元素,排名第六
    • $('#parent > child')
      这种选择和上面的相同,排名第五
    • parent.children(child) .sibling(),排名第四
    • $parent.find('child')
      这种选择会被转成getElementById,getElementByName,getElementByTagName等javascript原生语法,所以速度最快,排名第一
    总结:ID选择器是最快的选择器,建议多用。然后是标签选择器,其次是class选择器   

函数

  1. 使用jQuery的内部函数data()来存储状态

  2. 尽量使用on方法来绑定事件,因为任何绑定方法都是最终使用on来实现的

代码质量

  1. 不要在循环中直接操作 DOM:
    // 性能差
    $.each(myArray, function(i, item) {
    var newListItem = '

  2. '+item+'';
    ('#contain').append(newListItem);  });  // 性能好  var html = '';.each(myArray, function(i, item) {
    html += '
  3. ' + item + '';
    });
    $('#contain').html(myHtml);

  4. 对数组循环时,缓存数组长度
    for(var i = 0, len = array.length; i < len; i++) {

    }           
  5. 尽量少使用匿名函数,最好使用类封装
    var mo = {
    init: function() {

        }        
    };           
  6. 缓存变量,DOM遍历最消耗性能,所以尽量将重用的元素缓存
    height = ('#element').height();('#element').css('height', height);
    // 好的做法
    element= ('#element');
    height =  element.height(); element.css('height', height);

  7. 尽量少使用全局变量
    ele= ('#element');
    // 最好使用var
    var  ele= ('#element');

  8. 简单的语句可以使用原生的javascript,因为jQuery最终执行的也是原生的

  9. 使用链式写法,因为使用链式写法jQuery自动缓存每一步的结果,因此比非链式写法要快

  10. 尽量少使用$.each进行循环,使用原生javascript的for和while来进行

  11. jQuery大部分方法都有两种,例如: ().each .each

    $().each是基于jQuery对象的,jQuery对象会占用很多资源,因为他包含很多属性和方法        
    $.each是基于jQuery方法的,不会占用太多资源,所以尽量使用这种方式   
  12. 尽量使用 .ajax,使 .get(), .getJSON(), .post(),因为他们最终也是用的$.ajax()

减少代码嵌套:

减少代码嵌套,对于阅读和维护代码来时都是有益的,通过deffer我们可以减少代码的嵌套

      ***第一种:***        
        var request = function() {        
            var defer = $.Deferred();        
            $.ajax({url:'data/test.json'})        
            .done(function(data){        
                defer.resolve(data);        
            });        
            return defer;        
        };     

        $.when(request())
        .then(function(data) {
            console.log(data);
        });        

      ***第二种:***        
        var request = function() {        
            return $.ajax({url:'data/test.json'});        
        };

        $.when(request())
        .then(function(data) {
            console.log(data);
        });        

      ***第三种:***        
        $.when($.ajax(url:'data/test.json'))
        .then(function(data) {
            console.log(data);
        });        

建议多阅读几遍jQuery源码,只有知道其中的实现原理才能更好的使用它

jQuery Source

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: 《jQuery高级编程》是一本面向有一定前端开发基础的读者,深入探讨jQuery框架的高级应用与技巧的书籍。这本书内容广泛且深入,包括了jQuery的核心原理、高级选择器、动画效果、Ajax异步请求、事件处理、插件开发等等。 该书首先详细介绍了jQuery的核心原理和基础知识,深入探讨了jQuery选择器的使用技巧和优化方法。接着,书中介绍了如何使用jQuery创建各种动画效果以及如何优化动画性能。此外,还介绍了jQuery的事件处理机制和常见事件处理方法,以及如何使用事件委托和自定义事件。 更进一步,书中还详细讲解了如何使用jQuery实现Ajax异步请求,包括Ajax的基本使用、处理返回数据、错误处理等。此外,书中还介绍了如何进行跨域请求、使用JSONP等相关技术。 最重要的是,该书还涉及了如何开发jQuery插件,包括插件的基本结构、常见插件开发模式、插件的封装和发布等。还介绍了一些实用的jQuery插件,包括轮播图插件、日期选择插件、表单验证插件等等。 总之,《jQuery高级编程》是一本面向有一定基础并希望深入学习jQuery的读者的高级教程。通过阅读该书,读者能够系统地学习和掌握jQuery的高级应用与技巧,提升自己在前端开发中的能力和水平。 ### 回答2: 《jquery高级编程》是一本面向中高级开发者的jQuery编程指南。本书主要包括了jQuery的高级特性、设计模式、插件开发等内容,适合读者已经具备一定jQuery基础并想要深入学习和掌握该库。 首先,本书从jQuery的基础开始介绍,包括选择器、操作DOM元素、事件处理等内容。然后,逐步深入讲解了jQuery的高级特性,如元素动画、效果与动画、Ajax和延迟对象等。通过阅读本书,读者能够对jQuery的核心功能有更深入的理解,并能够运用到实际项目中。 同时,本书还介绍了一些常用的设计模式和最佳实践,帮助读者写出更加优雅、高效的代码。书中也提供了大量的示例和案例,让读者可以更好地理解和应用所学知识。 此外,本书还涵盖了插件开发和扩展jQuery的内容。通过学习如何编写自己的插件,读者能够将jQuery的功能扩展到更广泛的应用场景中,提高开发效率和代码质量。 总而言之,《jquery高级编程》是一本系统全面的jQuery开发指南,适合有一定基础的开发者进一步深入学习并提升技术水平。无论是理论还是实践,本书都能给读者提供宝贵的指导和帮助。 ### 回答3: 《jQuery高级编程》是一本专门介绍jQuery技术的书籍。作为一本高级编程指南,这本书不仅向读者介绍了jQuery的基础知识和常见用法,还深入探讨了更高级的概念和技术。本书的作者具有丰富的经验和深入的理解,为读者提供了极为实用和有洞察力的内容。 在《jQuery高级编程》中,读者将学习到如何使用jQuery来创建交互性强、动态性强的网页。书中提供了大量的代码示例和练习,帮助读者理解和掌握jQuery的各种功能和方法。同时,该书还介绍了jQuery的一些高级特性,如插件开发、事件委托、动画效果和Ajax技术等。 除了介绍和讲解基础知识外,本书还讨论了一些最佳实践和性能优化的方法。通过学习这些技巧,读者可以更好地使用jQuery和其他相关技术,提高网页的加载速度和用户体验。 总的来说,如果你已经熟悉基础的jQuery知识,想要进一步提升自己的技能并深入理解jQuery的原理和应用,那么《jQuery高级编程》是一本非常值得推荐的书籍。无论是前端开发人员还是对网页交互性感兴趣的读者,都能从中获得丰富的知识和实用的技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值