`

jQuery选择的工作原理和优化2

阅读更多

以前写过一篇优化的文章,是关于书写选择器的,今天写这篇主要是应用的时候通过局部变量而减少jquery的资源消耗。
      由于jquery本身对每次的选择器结果并没有cache,也就是说$('div');$('div');就会重复的从头到尾再选择一次,理想的情况下, 如果页面的结构没有发生变化,应当第二次遇见同样的选择直接返回第一次的结果,这样就会提高效率,但是jquery本身没有提供这样的功能,那我们再应用 jquery的时候就要注意和考虑自己的代码结构,尽量避免重复的选择。现在很多流行的插件在书写的时候也没有注意这个问题,下边先看看例子,之后再说我 们平时书写的时候一般要注意那些问题。
     一般:
$('div').each(function(){
   $(this).click(function(){
      alert('click');
   });
   $(this).find('span').css('color','red');
});
    优化之后:
$('div').each(function(){
   var _self=$(this);
   _self.click(function(){
      alert('click');
   });
   _self.find('span').css('color','red');
});
上边这个例子非常简单,当然你可以说直接连写不就把问题解决了嘛,答案是肯定的,但是我们往往在复杂的应用的时候,我们想保存现在this指针,而不是jquery自己指向的指针,看看下边这个:
$('div').each(function(){
   $(this).click(function(){
      alert('click');
   });
   $(this).find('span').css('color','red');
   $(this).prev().css('color','red');
   $(this).prev().find('span').css('color','red');
});
优化后:
$('div').each(function(){
var _self=$(this);
var _selfP=_self.prev();
   _self.click(function(){
      alert('click');
   });
   _self.find('span').css('color','red');
   _selfP.css('color','red');
   _selfP=_.find('span').css('color','red');
});
     这个例子中,应该很明显了,我们少执行3次jquery的选择器,而是用_self这样的局部变量做了cache,其余的就不多说了,因为我们定义的是局部变量,也不要担心会占有内存,在函数结束的时候内存就会释放出来。
    最后说点平时书写的注意事项:
    1、选择器的开始位置,上篇说过用id定位。
    2、this指针的cache和选择器的cache,就这篇主题。
    3、全部变量尽量减少,这个下篇说明原因和书写方法。

分享到:
评论
1 楼 lanshunfang 2011-03-25  
改进jquery, 请看:http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx

相关推荐

    jQuery选择器的工作原理和优化分析

    new jQuery,new jQuery.fn和new jQuery.fn.init的子对象是一样的,只是有没有执行到init的不同,这里就不讲原因了,等下一篇再讲为什么会是这样。 当我们使用选择器的时候$(selector,content),就会执行 init...

    jQuery权威指南-源代码

    书名:jQuery权威指南(系统介绍jQuery方方面面,囊括118个实例和2个综合案例,实战性强) 作者:陶国荣 著 书号:978-7-111-32543-7 定价:59.00元 出版社:机械工业出版社华章公司 出版时间:2011年1月 编辑推荐:...

    超实用的jQuery代码段

    《超实用的jQuery代码段》从jQuery框架的使用原理与应用场景出发,对最实用的jQuery代码段进行了全方位的介绍和演示。全书分为11章,包含网页效果、DOM元素与属性、HTML事件、CSS样式、用户输入自动完成、拖放、图形...

    jQuery权威指南366页完整版pdf和源码打包

    3.10.3 功能实现 3.10.4 代码分析 3.11 本章小结 第4章 jquery中的事件与应用 4.1 事件机制 4.2 页面载入事件 4.2.1 ready()方法的工作原理 4.2.2 ready()方法的几种相同写法 4.3 绑定事件 ...

    MingGeJS1.7.1类库-国产JQUERY

    2:众所周之,JQUERY的动画原理是采用定时器方原理,minggeJS原理不同,minggeJS的动画采用的是CSS3过渡原理,遗含的是minggeJS的动画不支持IE678。 minggeJS并不是第一个采用CSS3过渡动画,zepto的动画也是采用这...

    PHP jquery瀑布流特效源码

    PHP jquery实现瀑布流布局,其实一个核心的原理是,当滚动到最底部以上100像素时, 加载新内容。为了保证大家能够充分理解瀑布流的实现原理,就尽量保证了实例的简单性,这款瀑布流仅仅使用了php数组作为瀑布流所...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    10-25 2 jquery id选择器 层次选择器 10-25 3 jquery过滤选择器及练习题讲解 10-25 4 内容过滤器 可见度过滤器及练习讲解 10-26 1 课程回顾 10-26 2 属性过滤选择器 10-26 3 子元素选择器 表单对象属性选择器 10-26 ...

    PHP jquery瀑布流特效源码.rar

    PHP jquery实现瀑布流布局,其实一个核心的原理是,当滚动到最底部以上100像素时, 加载新内容。为了保证大家能够充分理解瀑布流的实现原理,就尽量保证了实例的简单性,这款瀑布流仅仅使用了php数组作为瀑布流所...

    MingGeJS1.7.2

    2:众所周之,JQUERY的动画原理是采用定时器方原理,minggeJS原理不同,minggeJS的动画采用的是CSS3过渡原理,遗憾的是minggeJS的动画不支持IE678。 minggeJS并不是第一个采用CSS3过渡动画,zepto的动画也是采用这...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    jQuery 和Dom关系及jQuery版本 jQuery选择器 实例多选反选取消 删选器以及Tab菜单示例 示例:模态编程框 jQuery 样式以及属性操作 示例:TAB切换菜单 jQuery内容操作 点赞以及jQuery css操作 JQuery高度以及位置操作...

    MingGeJS1.7类库

    2:众所周之,JQUERY的动画原理是采用定时器方原理,minggeJS原理不同,minggeJS的动画采用的是CSS3过渡原理,遗含的是minggeJS的动画不支持IE678。 minggeJS并不是第一个采用CSS3过渡动画,zepto的动画也是采用这...

    如何做到jQuery-free?

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。据统计,...

    YUI Compressor压缩JavaScript原理及微优化

    最近写一个jQuery插件,在最后完成优化时,对比发现压缩后文件比较大,就思考那些是可以被修改和优化的,发现压缩原理也有很大的空间可以学习,通过这次对YUI Compressor压缩JavaScript深有体会,那些是可以被压缩的...

    jquery lazyload延迟加载技术的实现原理分析

    因此掌握lazyload技术是个不错的选择,可惜jquery插件lazy load官网(http://www.appelsiini.net/projects/lazyload)称不支持新版浏览器。 lazyload在什么场合中应用比较合适? 涉及到图片,falsh资源,iframe,网页...

    微博的搜索引擎优化价值分析等资料.rar

    2012-05-27 11:02 22,486,569 C++语言的设计和演化.zip 2012-05-27 11:04 1,611,736 Erlang深度分析.pdf 2012-05-27 11:07 749,950 HTML5 Canvas 2D API 规范 1.0 中文版.pdf 2012-05-27 11:08 180,401 Java基础复习...

    无限加载、JQuery-readmore加载、【点击】无限加载代码

    实现伪无限加载,原理就是前端代码中直接输出N(任意条数)条记录,通过readmore插件和JQuery代码判断,显示每次加载的数量; 每次点击“more”按钮加载的指定条数(直接修改代码中的数字); 全部加载完毕后,...

    interview:前端面试浏览器原理v8内存管理http1.xhttp2 webpack babel前端es6手撕

    路由实现babel实现webpack实现配置加载程序插件优化文件监听工作原理 vue原理实现vuex 汇总webpack之间选择 css浏览器的一些宽高可是区域滚动区域 docker原理kubernetes 信使 地理服务器 浏览器原理浏览器缓存机制...

Global site tag (gtag.js) - Google Analytics