读jquery 权威指南[7]-性能优化与最佳实践
一、优化选择器执行速度
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]-性能优化与最佳实践相关推荐
- java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...
- 一文了解 NextJS 并对性能优化做出最佳实践
点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 引言- 从本文中,我将从是什么,为什么,怎么做来为大家阐述 NextJS 以及如何优化 NextJS 应用体验. 一.NextJS是什么- ...
- 京东微信购物性能优化,最佳实践总结!
京东微信购物首页(以下简称微信首页)曾经作为微信购物一级入口(目前替换为京喜小程序)一直对性能有着极高的要求,本文将介绍微信首页的一些优化经验. 一般来说产品是按以下方式进行迭代的,我认为循环的起点应 ...
- 读jquery 权威指南[4]-Ajax
一.获取异步数据 jQuery可以从服务器异步获得静态数据. ①load() $.load(url,data,callback) url要加载的页面地址, data发送到服务器的数据key/value ...
- 读jQuery 权威指南[5]-插件
一.说明 jQuery插件官网:http://plugins.jquery.com/ 使用插件时引用顺序:插件引用要位于主jquery库之后. 二.插件应用实例 演示插件jquery.validate ...
- 读jQuery 权威指南[6]--实用工具函数
官方地址:http://api.jquery.com/category/utilities/ 一.数组和对象操作 1. $.each--遍历 $.each(obj,function(param1,pa ...
- 读jquery 权威指南[2]-事件
1. 事件冒泡 阻止事件冒泡的两种方式: event.stopPropagation(); return false ; 2. 绑定事件--bind(type,[data],function) ty ...
- 读jquery 权威指南[3]-动画
一. 显示与隐藏--hide(),show() 1. 方法: hide(speed,[callback]); show(speed,[callback]); 说明:这两个方法还可以实现带动画效果的显示 ...
- 跟小静读《jQuery权威指南》——目录
前言 2014年开始了,年底给自己制订的学习计划,第一步先从学习<jQuery权威指南>开始. jQuery大家都很比较熟悉,但是我经常是边用的时候边对照着API,这次找本书通读一遍,记录 ...
最新文章
- 第五次作业:四则运算之升级
- ASP与ASP.NET的区别
- 100G内存下,MySQL查询200G大表会OOM么?
- CentOS7.6安装Nodejs(Npm)
- java第三阶段源代码_有效Java第三版的源代码已更新为使用较新的功能
- 我理解中的“大前端”/“大无线”
- leetcode刷题:求容器中能乘最大多少水
- 会议上,如何分配任务
- JanusGraph基础知识
- 百位活跃天使投资人名单
- linux 进程 ldt,LInux 描述符GDT, IDT LDT结构定义
- js 输出为underfined
- 系统之家 Win10_21H1 x64位 游戏专业版系统下载 2021.06
- openCv4Android之fitLine中各算法总结
- 云队友丨在注意力稀缺的时代,专注是你成败的关键筹码
- 求生之路服务器未响应,求生之路2玩起来速度快,但是过几秒后,就卡住显示未响应,这是为什么...
- 基于Sentinel-2的杞县大蒜提取试验
- ​Excel如何转换成Word文档?教你如何实现转换
- 小金额的样品费,大家都是用什么收款呢?
- 从天猫双“11”预测,说说GMC的市场
热门文章
- HTML一级菜单和二级菜单区别,JavaScript点击一级菜单打开和关闭二级菜单
- php中等腰金字塔挖空,php 用for循環做,金字塔,菱形,空三角
- yum 安装mysql 启动_linux(centos6.9)下使用yum安装mysql,及启动MySQL等
- java方法和 IDEA Debug调试
- 对数据可视化的理解_使数据可视化更容易理解
- facebook 面试_如何为您的Facebook产品设计面试做准备
- 检测输入路径是否存在错误_为什么存在用户输入错误
- Android PermissionUtils:运行时权限工具类及申请权限的正确姿势
- 服务治理·理论篇(一)
- AngularDart 现已全面采用 Dart 开发