一、优化选择器执行速度

1. 优先使用ID选择器和标记选择器

  • 使用选择器时应该首选ID选择器($("#id")),其次是标记选择器($("div")),最后再选用class、属性等选择器。
  • 避免重复使用ID号修饰ID号,例如$("#div1 #div2")。也避免使用tag,class等修饰ID号,例如$(".title #id")。
  • 使用属性选择器时,尽量使用标记进行修饰。例如$(div[title='aa'])。

2. 使用jQuery对象缓存

  • 如果多次操作同一个DOM元素,可以将其存在全局变量中,避免重复调用选择器。
  • 缓存JQuery的变量命名规则尽量以$开头。
  • 如果同一个DOM对象进行多个操作,尽量使用链式写法。

3. 给选择器一个上下文

格式:$(expression,[context]),expression是选择器表达式,context是选择器查找的范围。这样会比在全局查找效率高一些。

实例:

<script type="text/javascript">$( function() {window.$objPub = { //在全局范围中,定义一个windows对象$objTmp0: $( "#div0", ".MyCls0" ),$objTmp1: $( "#div1")}TestFun();})function TestFun() { //自定义显示div内容的函数$objPub.$objTmp0.html( "Tmp0").css("width" ,"100px");$objPub.$objTmp1.html( "Tmp1");}</script >

二、处理选择器不规范元素

1. 选择器属性中包含特殊符号:特殊字符前添加转义字符\\。

2. 选择器中空格符:包含空格时表示祖先元素和后代元素的关系;不包含空格时表示一个选择器中两种筛选条件的合并。

<script type="text/javascript">$( function() {var $objTmp0 = $(".MyCls :hidden" );//含有空格符,.MyCls子元素中的隐藏元素var $objTmp1 = $(".MyCls:hidden" );//没有空格符,.MyCls类名并且隐藏的元素var $objTest = $("#div\\[test\\]" );//选择器特殊符号
        })</script >

三、解决jQuery库与其他库$冲突问题

使用jQuery.noConflict()转让$使用权,然后只能使用jQuery变量访问jQuery对象。

1.jQuery库先于其他库导入

无需使用jQuery.noConflict()方法。只要使用jQuery方法时不要使用$符号而是使用jQuery符号就可以了。

2.jQuery库后于其他库导入

需要先使用jQury.noConflict(),然后使用jQuery符号操作jQuery中的对象。如果仍然想使用简洁符号,有两种方法

①自定义其他符号用作快捷方式:

var j=jQuery.noConflict();j( function() {j( "#Button1").click(function () {获取对象var $objTmp = j("#txtName" );显示内容j( "#divTmp").html("J_" + $objTmp.val());})})

②在jQuery方法内部继续使用$符号。

jQuery.noConflict();jQuery( function($) {$( "#Button1").click(function () {//获取对象var $objTmp = $("#txtName" );//显示内容$( "#divTmp").html("J_" + $objTmp.val());})})

四、其他优化

  • 尽量减少对DOM元素直接操作的次数。
<script type="text/javascript">$( function() {//定义数组var arrList = ["list0" , "list1", "list2", "list3" , "list4", "list5"];var strList = "" ; //初始化字符$.each(arrList, function(index) {//遍历后累加数组元素strList += ( "<li>" + arrList[index] + "</li>" );})//一次性完成DOM元素的增加$( "#ulFrame").append(strList);})</script >

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

五、区分DOM对象和jQuery对象

1.DOM对象和jQuery对象定义的区别

  • DOM对象:通过传统js方法获取的DOM元素对象;
  • jQuery对象:通过jQuery方法包装原始的DOM对象后生成的新对象。

2.DOM对象和jQuery对象的转换

如果想使DOM对象和jQuery对象之间的方法相互调用,需要先将对象进行类型转换。

  • DOM转jQuery:DOM对象通过$()方法进行包装就可以转换为jQuery对象。
  • jQuery转DOM:通过get(index)或者[index]方法,可以将jQuery对象转换为DOM对象。
<script type="text/javascript">$( function() {//***** DOM对象转成jQuery对象 *****////DOM对象var objDom0 = document.getElementById("div0");//转成jQuery对象var $obj0 = $(objDom0);//调用jQuery中的方法设置其中的内容$obj0.html( "DOM对象转成jQuery对象后设置的内容" );//***** jQuery对象转成DOM对象 *****////jQuery对象var $obj1 = $("#div1" );//转成DOM对象var objDom1 =  $obj1[0];//或者$obj1.get(0);//调用JavaScript中的对象方法设置内容objDom1.innerHTML = "jQuery对象转成DOM对象后设置的内容" ;})</script >

转载于:https://www.cnblogs.com/janes/p/3541455.html

读jquery 权威指南[7]-性能优化与最佳实践相关推荐

  1. java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]

    Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...

  2. 一文了解 NextJS 并对性能优化做出最佳实践

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 引言- 从本文中,我将从是什么,为什么,怎么做来为大家阐述 NextJS 以及如何优化 NextJS 应用体验. 一.NextJS是什么- ...

  3. 京东微信购物性能优化,最佳实践总结!

    京东微信购物首页(以下简称微信首页)曾经作为微信购物一级入口(目前替换为京喜小程序)一直对性能有着极高的要求,本文将介绍微信首页的一些优化经验. 一般来说产品是按以下方式进行迭代的,我认为循环的起点应 ...

  4. 读jquery 权威指南[4]-Ajax

    一.获取异步数据 jQuery可以从服务器异步获得静态数据. ①load() $.load(url,data,callback) url要加载的页面地址, data发送到服务器的数据key/value ...

  5. 读jQuery 权威指南[5]-插件

    一.说明 jQuery插件官网:http://plugins.jquery.com/ 使用插件时引用顺序:插件引用要位于主jquery库之后. 二.插件应用实例 演示插件jquery.validate ...

  6. 读jQuery 权威指南[6]--实用工具函数

    官方地址:http://api.jquery.com/category/utilities/ 一.数组和对象操作 1. $.each--遍历 $.each(obj,function(param1,pa ...

  7. 读jquery 权威指南[2]-事件

    1.  事件冒泡 阻止事件冒泡的两种方式: event.stopPropagation(); return false ; 2. 绑定事件--bind(type,[data],function) ty ...

  8. 读jquery 权威指南[3]-动画

    一. 显示与隐藏--hide(),show() 1. 方法: hide(speed,[callback]); show(speed,[callback]); 说明:这两个方法还可以实现带动画效果的显示 ...

  9. 跟小静读《jQuery权威指南》——目录

    前言 2014年开始了,年底给自己制订的学习计划,第一步先从学习<jQuery权威指南>开始. jQuery大家都很比较熟悉,但是我经常是边用的时候边对照着API,这次找本书通读一遍,记录 ...

最新文章

  1. 第五次作业:四则运算之升级
  2. ASP与ASP.NET的区别
  3. 100G内存下,MySQL查询200G大表会OOM么?
  4. CentOS7.6安装Nodejs(Npm)
  5. java第三阶段源代码_有效Java第三版的源代码已更新为使用较新的功能
  6. 我理解中的“大前端”/“大无线”
  7. leetcode刷题:求容器中能乘最大多少水
  8. 会议上,如何分配任务
  9. JanusGraph基础知识
  10. 百位活跃天使投资人名单
  11. linux 进程 ldt,LInux 描述符GDT, IDT LDT结构定义
  12. js 输出为underfined
  13. 系统之家 Win10_21H1 x64位 游戏专业版系统下载 2021.06
  14. openCv4Android之fitLine中各算法总结
  15. 云队友丨在注意力稀缺的时代,专注是你成败的关键筹码
  16. 求生之路服务器未响应,求生之路2玩起来速度快,但是过几秒后,就卡住显示未响应,这是为什么...
  17. 基于Sentinel-2的杞县大蒜提取试验
  18. ​Excel如何转换成Word文档?教你如何实现转换
  19. 小金额的样品费,大家都是用什么收款呢?
  20. 从天猫双“11”预测,说说GMC的市场

热门文章

  1. HTML一级菜单和二级菜单区别,JavaScript点击一级菜单打开和关闭二级菜单
  2. php中等腰金字塔挖空,php 用for循環做,金字塔,菱形,空三角
  3. yum 安装mysql 启动_linux(centos6.9)下使用yum安装mysql,及启动MySQL等
  4. java方法和 IDEA Debug调试
  5. 对数据可视化的理解_使数据可视化更容易理解
  6. facebook 面试_如何为您的Facebook产品设计面试做准备
  7. 检测输入路径是否存在错误_为什么存在用户输入错误
  8. Android PermissionUtils:运行时权限工具类及申请权限的正确姿势
  9. 服务治理·理论篇(一)
  10. AngularDart 现已全面采用 Dart 开发