1. 优化选择器执行的速度

优先使用ID与标记选择器

在jQuery中,访问DOM元素的最快方式是通过元素ID号,其次是通过元素的标记。因为前者源于JavaScript中的document.getElementById(),而后者源于document.getElementsByTagName()方法。

<div id="divTip" class="MyClass" title="tmp">测试文字</div>

这个时候 要访问这个div元素,如果有ID号,建议使用ID号直接访问元素,这样的速度是最快的;如果没有ID号,可使用元素标记(tag)访问,其次就是使用类别(class)进行访问。

在jQuery中访问页面元素时,应尽量避免出现下列的访问语法,说明如下:

1)虽然用ID好访问页面中的元素最快,但应避免重复修饰,即避免使用ID号修饰ID号,错误代码如下所示:

var eleName0 = $("#divTip #divShow");

2) 避免使用tag或class来修改ID号,这样的话,代码先执行遍历,后进行匹配,错误代码如下:

var eleName0 = $(".MyClass #divShow");

var eleName0 = $("div #divShow");

3) 如果是通过元素的属性访问,应尽量使用tag修饰进行访问,这样可以加快访问速度,正确的代码如下:

var eleName3 = $("div[title='tmp']");

使用jQuery对象缓存

所谓对象缓存,就是在使用jQuery对象时,先尽量使用变量保存对象名,然后,通过变量进行相应的方法操作。

例如:

var objTmp = $("#divTip");//先使用变量进行保存

objTmp.bind("click",function(){ alert("hello!");});

如果想让定义的变量在其他函数中也能使用,可以将该变量定义为全局性的变量,实现代码如下:

window.objPub = {//在全局范围中,定义一个windows对象

      objTmp:$("#divTip")

}

那么,通过全局的变量,可以在各个自定义的函数中访问该变量。通过变量,实现DOM元素的获取,显示代码如下:

function TestFun() {

  objPub.objTmp.bind("click",function(){alert("hello!");});

}

以上代码最终实现的功能,与定义局部变量一样,但它却可以被不同的自定义函数所调用,也可以当成普通的jQuery对象使用。

在使用变量缓存jQuery对象时,有以下两个地方需要我们在编写代码时注意。

1)无论是局部还是全局性的变量,为了避免与其他变量名相冲突,原则上,请尽量使用“$”符号进行命名,代码如下所示:

window.$objPub = {

  $objTmp:$("#divTip")

}

2)如果在同一个DOM对象中有多个对象的操作,应尽量采用链接式的写法优化调用的代码。

给选择器一个上下文

在jQuery中,DOM元素的查找可以通过$(element)方法实现。除此之外,还可以通过$(expression,[context])方法,在指定的范围内查找某个DOM元素,这个方法的优势在于,缩小定位元素的范围,比一般的元素定位更快捷,效果更好。

语法格式如下:

  $(expression,[context])

其中,参数expression为需要查找的字符串,可选项[context]为等待查找的DOM元素集、文档或jQuery对象。

<div id="div0" class="MyCls" title="tmp0"></div>

<div id="div1" class="MyCls" title="tmp0"></div>

$("#div0",".MyCls")

$("#div0")

明显 前者的查找速度更快

处理选择器中的不规范元素标志

1.选择器中含有特殊符号

$("#div#2#)

$("#div\\#2\\#")

为了正确获取这些属性中含有特殊字符的DOM元素,必须使用在特殊字符前添加转义符“\\”的方法。

2.选择器中含有空格符号

在元素的属性中除了含有特殊符号外,有时还会含有空格符。空格符在元素的属性中虽不起眼,但如果我们在编写通过选择器获取元素的代码时,选择器中含有空格符与不含有空格符将会出现两种完全不同的结果。

例如:

$(".MyCls :hidden")

$(".MyCls:hidden")

前者为类别为MyCls中的隐藏元素也就是 后代中的隐藏元素

后者为隐藏元素中类别为MyCls的元素

优化事件中的冒泡现象

使用stopPropagation()方法来停止事件中的冒泡事件

在元素绑定事件的过程中,还有一个方法target(),通过该方法可以获取触发事件的元素。如果是多个元素触发同一个事件,可以借助target()方法,获取这些元素的父级元素,并将事件绑定到父级元素,通过冒泡现象,扩展到其子级元素中,这在某种程度上,比将事件绑定到每个子级元素执行效果更加优化。

使用data()方法缓存数据

缓存数据无论是在前端页面开发,还是在后台服务器脚本编写,都有十分重要的作用。同样,在jQuery中,也可以通过data()方法将数据缓存,虽然使用局部或全局的变量可以保存数据,但变量并不能进行数据的缓存,而且并不依附于某元素自身;如果使用data()方法,可以针对元素定义数据,在元素中存取数据,从而避免数据被循环引用的风险。根据功能的不同,data()方法有下列几种使用格式:

1)根据元素中的名称定义或返回存储的数据,其调用格式为:

data([name])

其中,可选项参数[name]为字符型,表示存储数据的名称。

2)根据元素中的名称在元素上存储或设置数据,其调用的格式为:

data(name,value)

其中,参数name表示存储数据的名称,value表示将要被存储的数据。

3)除了定义和存储数据外,还可以移除元素中存放的数据,其调用格式为:

removeData(name)

其中,参数name表示将要被移除的元素上的数据名称。

解决jQuery库与其他库的冲突

在通常情况下,由于jQuery库良好的封装性,无论是全局变量(global),还是公用函数,都被无一例外地限定在其固有的默认空间中。基于这样的情况,在一般情况下jQuery库可以与其他的JS库并存,不会发生冲突现象。

jQuery.noConflict()

这个函数的作用是变更的使用权,以确定jQuery库不与其他库相冲突,使用权变更后,就只能使用jquery变量访问jquery对象了。

使用子查询优化选择器性能

在jQuery中,如果要查找一个元素,而这个元素被众多别的元素所包含或嵌套在其中。这时,如果直接使用find()方法进行查找,其操作性能较低。由于jQuery允许在一个集合中附加其他的选择操作,这样的话,我们可以先查找最外层的元素,保存起来,再查找更近一层的元素,进行保存,最后,在最接近的外层中,使用find()方法,查找需要的元素。通过这种方式,可以在本地变量中保存上一级对象,减少选择器性能开销。

减少对DOM元素直接操作

我们知道,DOM元素操作的原理是:先在内容中创建DOM结构,然后,更新现有的DOM结构。如果直接对DOM进行操作,那么,其性能也是很低的,因此,为了减少这种对DOM元素直接操作的次数,有必要在操作前完善大部分的DOM操作,最后通过一次直接操作,更新其DOM结构。

正确区分DOM对象与jQuery对象

DOM对象与jQuery对象的定义

所谓DOM对象,指的是通过传统的JavaScript方法获取的DOM元素对象

所谓jQuery对象,指的是通过jQuery语法包装原始的DOM对象后生成的新对象。jQuery对象在jQuery库中是特有的,只要是jQuery对象,就可以使用jQuery库中的所有方法与事件。

DOM对象与jQuery对象的类型转换

在jQuery中,可以很方便地完成DOM对象与jQuery对象之间的转换。只需调用jQuery中提供的[index]与get(index)方法即可将jQuery对象转换成jQuery对象。DOM对象只要通过jQuery方法$()进行包装,就可以转换成jQuery对象。

jQuery性能优化的更多相关文章

  1. jQuery性能优化指南(转载)

    现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, ...

  2. jQuery性能优化的28个建议

    我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...

  3. jQuery:jQuery性能优化28条建议

    http://www.xue5.com/WebDev/jQuery/671700.html 直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将 ...

  4. jquery性能优化的十种方法

    jquery性能优化的十种方法 有时候我们在书写jquery的时候,为了书写代码方便,往往忽略了程序执行过程中,给客户端带来的压力.随之而来的就是在某些低端浏览器或者低端电脑上运行速度缓慢,甚至无法运 ...

  5. jQuery 性能优化技巧

    原文地址:jQuery 性能优化技巧 博客地址:http://www.extlight.com 一.使用最新版本 jQuery 类库 二.合理使用选择器 # 推荐使用 $("#id" ...

  6. jQuery性能优化和技巧

    jQuery性能优化 ①使用最新版本的jQuery类库 ②使用合适的选择器 ③缓存对象 ④循环时的DOM操作 ⑤数组方式使用jQuery对象 ⑥事件代理 ⑦将你的代码转化成jQuery插件 ⑧使用jo ...

  7. 28个jQuery性能优化的建议

    我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...

  8. jQuery性能优化(转)

    摘要:jQuery是我们经常使用的强大的JS类库,因此它的性能优化十分重要,下面就重几点来说明 原文作者:szyuxueliang    原文地址:http://www.cnblogs.com/yxl ...

  9. jQuery性能优化篇

    jQuery高级技巧——性能优化篇 阅读目录 通过CDN(Content Delivery Network)引入jQuery库 减少DOM操作 适当使用原生JS 选择器优化 缓存jQuery对象 定义 ...

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

    一.需要注意的是的定义jQuery当变量被添加varkeyword 然而,这并不jQuery.整个javascript开发过程,所有需要注意,一定不要将其定义为下面的示例: $loading = $( ...

随机推荐

  1. 转:最近5年133个Java面试问题列表

    最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来 ...

  2. SQL Server Lock Escalation - 锁升级

    Articles Locking in Microsoft SQL Server (Part 12 – Lock Escalation) http://dba.stackexchange.com/qu ...

  3. 严重:Error listenerStart

    转自: http://1985wanggang.blog.163.com/blog/static/7763833200942611050436/ 近日浏览论坛,发现好多人提问,都说在运行web程序时, ...

  4. sphinx全文检索 安装配置和使用

    公司项目刚刚导入大量产品数据,然后发现网站的产品搜索很卡,原本是原生sql的like来做模糊搜索,数据量20W的时候还可以接受,但是上百万就很卡了,所以需要做优化. 经过考虑,打算采用全文检索 sph ...

  5. x-csrf-token

  6. cf #379div2

    A. 题意:输入一串字符只含A和D,判断A和D的多少比较, 分析:直接计数 B. 题意:给出数字2,3,5,6的个数,用这些数组成256和32,要求最后组成的数的和最大 分析:贪心,优先组成256,然 ...

  7. 开发Blog整理

    开发Blog记录 清理收藏夹 太多了,来不及看了. http://blog.sina.com.cn/s/blog_67d95f40010113ec.htmlhttp://segmentfault.co ...

  8. Mongodb 副本集分片(一)---初始化mongodb安装启动

    写在前面:mongodb是nosql非关系型数据库中,比较受欢迎的产品.在数据持久化及与关系型数据库的关联上也做的比较好,目前各大公司在存放二进制文件(图片.视频等)中应用也比较广泛.其遵循的key- ...

  9. 常看常遇见之一——BS架构VS CS架构

    常看常遇见之一——BS架构VS CS架构 1.BS架构 即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户 ...

  10. POJ1635 树的最小表示

    /*zoj1990Subway Tree Systems题目大意:初始时站在树的根节点,若朝着远离根的方向走,记录“”,接近根的方向走记录“”.并且树的每一条边只能来回走一次(即向下和返回).一个合法 ...