【jQuery基础学习】11 jQuery性能简单优化
关于性能优化
- 合适的选择器
- $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继续查找
- $("p")标签选择器也是直接调用底层方法,所以是第二选择
- $(".class")也是直接调用底层方法,不过IE8及更早版本不支持getElementByClassName,它会采用DOM搜索方式,所以会影响性能。
- $("[attribute=value]")采用DOM搜索的方式,很多现代浏览器支持querySelectorALL方法,但不同浏览器上性能也有所区别。总的来说,用这种方式定位DOM元素,性能不太理想。
- $(":hidden")这种伪选择器方式,同样没有在本地js方法中实现。同样DOM搜索
- 以上五种方法性能依次而降,所以尽量用ID选择器,并且给选择器指定上下文。如果你强行要用DOM搜索方式的选择器,建议先用个ID选择器缩小范围,再用find函数进一步搜索。
- 缓存对象
- 尽量去用链式操作,而不是多次使用相同的选择器,然后再进行不同的操作
- 如果不能用链式操作,可以考虑将需要用到的jQuery对象放到一个全局对象里。这样不用每次使用都去查找DOM。
- 循环时的DOM操作
- 不要去循环进行DOM插入的操作,就是$("#id").append及类似的操作,这样会很耗性能。所以可以考虑先把一大串这样的操作,用拼接HTMl字符串的方式,当做字符串先拼好,然后再插入。
- 数组方式使用jQuery对象
- jQuery选择器返回的是一个jQuery对象,如果你是在用一个实际上是数组意义的结构的话,那么在性能上讲,可以用for和while去代替$("#id").each()的写法。
- 事件代理
- 尽量去少绑定事件,否则也会带来负面性能影响。当绑定多个事件时,可以考虑是否能够通过它们共同的父级去只绑定一个事件
//可以想一想下面这种情况,如果是一个大型表格,那么会绑定N次事件。
$('#myTable td').click(function(){
$(this).css('background','red');
});
//利用事件的冒泡机制去代替上面那种拙劣的写法
$('#myTable').click(function(e){
var $click=$(e.target);//e.target捕捉触发的目标元素
$click.css('background','red');
});
//当然我们还可以用on来进行更简单的事件绑定
$('#myTable').on('click','td',function(){
$(this).css('background','red');
});
- 尽量去少绑定事件,否则也会带来负面性能影响。当绑定多个事件时,可以考虑是否能够通过它们共同的父级去只绑定一个事件
- 可以考虑用自定义jQuery插件去取代自己的重复代码
- 使用join()去取代+来拼接字符串
- 可以考虑在更需要性能的地方使用原生js代码
- 合理使用HTML5的data属性
<div id="d1" data-role="page" data-last-value="43" data-options='{"name":"Troy123"}'></div> $("#d1").data("role");//"page"
$("#d1").data("lastValue");//
$("#d1").data("options").name;//"Troy123"
最后作者还写了一些使用jQuery的技巧,其实也就是一些解决方案。
好吧,更通俗的讲就是可以在网上搜一搜,然后直接复制粘贴的代码。
我觉得这些都很次要,所以只是自己看完就没有贴上来了。毕竟当你遇到这些问题的时候百度一下copy就好了。
【jQuery基础学习】11 jQuery性能简单优化的更多相关文章
- jQuery基础学习3——jQuery库冲突
默认情况下,jQuery用$作为自身的快捷方式. jQuery库在其他库之后导入 在其他库和jQuery库都被加载完毕后,可以在任何时候调用jQuery.noConflict()函数来将变量$的控制权 ...
- jQuery基础学习(二)—jQuery选择器
一.jQuery基本选择器 1.CSS选择器 在学习jQuery选择器之前,先介绍一下之前学过的CSS选择器. 选择器 语法 描述 示例 标签选择器 E { ...
- jQuery基础学习(一)—jQuery初识
一.jQuery概述 1.jQuery的优点 jQuery是一个优秀的JavaScript库,极大地简化了遍历HTML文档.操作DOM.处理事件.执行动画和开发Ajax的操作.它有以下几点优 ...
- jQuery基础学习4——jQuery容错性
使用jQuery选择器不仅比使用传统的getElementById()和getElementsByTagName()函数简洁得多,而且还能避免某些错误. <script type="t ...
- jQuery基础学习(三)—jQuery中的DOM操作
一.查找节点 查找属性节点: 通过jQuery的选择器来完成. 操作属性节点: 调用jQuery对象的attr()来获取它的属性值. 操作文本节点: 通过text()方法 ...
- JQuery基础学习总结
JQuery基础学习总结 简单总结下JQuery: 一:事件 1.change事件 <!DOCTYPE html> <html lang="en"> < ...
- 【总结整理】JQuery基础学习---样式篇
进入官方网站获取最新的版本 http://jquery.com/download/ 中文 https://www.jquery123.com/ <!--JQuery:轻量级的JavaScr ...
- 【jQuery基础学习】00 序
作为一个从来没有认真学过jQuery的菜来讲,我所学的都是jQuery基础. 算是让自己从0开始系统学一遍吧.学习书籍为:<锋利的jQuery>. 虽然是个序,表示一下我是个菜,但还是来几 ...
- 【jQuery基础学习】09 jQuery与前端(这章很水)
这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的. 关于网站结构 文件结构 前端文件分三个文件夹放 images文件夹用来存放将要用到的图 ...
- 【总结整理】JQuery基础学习---动画
jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元素的st ...
随机推荐
- whoami 和 Who am i
① 两个命令在一般的情况下,似乎效果是一样的 ② 但是当你执行完su 命令切换用户后,就不一样了,who am i 显示最早login的账户,而whoami 显示切换后的账户 例如: -bash-3. ...
- ARCGIS 10.1 发布服务问题以及注意事项汇总
本文会逐渐丰富,并在遇到问题后进行整理进来. 一.了解ArcGIS Server以及如何利用ArcServer发布服务 官方中文帮助文档:http://resources.arcgis.com/zh- ...
- songtaste网站歌曲真实URL获取
个人挺喜欢songtaste网站的歌曲的,下载方法也层出不穷,可是作为程序员如果不知其中原理的方法真是羞愧.首先简单点的方法当然有google插件这样的嗅探器了,不过这种工具的原理还不是很了解.今天先 ...
- 多条件动态LINQ 组合查询
本文章转载:http://www.cnblogs.com/wangiqngpei557/archive/2013/02/05/2893096.html 参考:http://dotnet.9sssd.c ...
- 使用Highcharts实现图表展示
本篇随笔记录的是本人2011年做广州地铁协同办公项目时,图表需求的解决方案.(Demo中只是虚拟的测试数据) 关键技术点: 使用Highcharts实现图表展示: 另外使用Highslide弹窗.使用 ...
- visual studio 2013 秘钥
#visual studio 2013# 有效密钥:BWG7X-J98B3-W34RT-33B3R-JVYW9
- VMware下OS X Yosemite安装VMsvga2桌面黑屏解决方法
VMsvga2目前并不支持Yosemite,如果安装的话进入桌面除了顶部菜单,全部黑屏.通过顶部菜单打开的大部分应用都会立刻奔溃关闭.参考以下步骤可以解决问题: 1.下载VMsvga2的uninsta ...
- SpringMVC 拦截器
类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 常用场景: 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限 ...
- how to create a framework for ios . cool!
预热. http://www.raywenderlich.com/65964/create-a-framework-for-ios http://insert.io/framework-ios8-xc ...
- webgame设计之功能模块的代理模式
原文地址:http://chengduyi.com/blog/?post=27 在游戏设计中,通常会将一些实现了具体功能的模块进行封装,达到重用的目的.这些功能模块包括:1.网络通信模块(实现连接,断 ...