jquery

MicroPython整数类型与进制表示深度解析(ESP32) 在嵌入式Python开发中,整数类型是连接高级语法与底层硬件的关键数据载体。其本质涉及内存布局、编译期字面量处理、二进制补码运算及动态类型管理。MicroPython针对ESP32等资源受限MCU,采用31位small int优化策略,兼顾性能与内存效率;同时支持二进制、八进制、十进制、十六进制四种字面量,每种进制对应特定硬件语义——如二进制映射寄存器位域、十六进制表征内存地址与协议字段、十进制保障人机交互可读性。理解整数溢出的静默截断行为、类型检查的内存开销影响,以及REPL中整数归一化机制,是构建高可靠 阅读详情

我主要参考了Addy Osmani的PPT《提高jQuery性能的诀窍》(jQuery Proven Performance Tips And Tricks)。他是jQuery开发团队的成员,具有一定的权威性,提出的结论都有测试数据支持,非常有价值。

1. 使用最新版本的jQuery

jQuery的版本更新很快,你应该总是使用最新的版本。因为新版本会改进性能,还有很多新功能。

下面就来看看,不同版本的jQuery性能差异有多大。这里是三条最常见的jQuery选择语句:

1
2
3
$( '.elem' )
  $( '.elem' , context)
  context.find( '.elem' )

我们用1.4.2、1.4.4、1.6.2三个版本的jQuery测试,看看浏览器在1秒内能够执行多少次。结果如下:

执行结果
可以看到,1.6.2版本的运行次数,远远超过两个老版本。尤其是第一条语句,性能有数倍的提高。

其他语句的测试,比如.attr(“value”)和.val(),也是新版本的jQuery表现好于老版本。

2. 用对选择器

在jQuery中,你可以用多种选择器,选择同一个网页元素。每种选择器的性能是不一样的,你应该了解它们的性能差异。

(1)最快的选择器:id选择器和元素标签选择器

举例来说,下面的语句性能最佳:

1
2
3
$( '#id' )
  $( 'form' )
  $( 'input' )

遇到这些选择器的时候,jQuery内部会自动调用浏览器的原生方法(比如getElementById()),所以它们的执行速度快。

(2)较慢的选择器:class选择器

$(‘.className’)的性能,取决于不同的浏览器。

Firefox、Safari、Chrome、Opera浏览器,都有原生方法getElementByClassName(),所以速度并不慢。但是,IE5-IE8都没有部署这个方法,所以这个选择器在IE中会相当慢。

(3)最慢的选择器:伪类选择器和属性选择器

先来看例子。找出网页中所有的隐藏元素,就要用到伪类选择器:

1
$( ':hidden' )

属性选择器的例子则是:

1
$( '[attribute=value]' )

这两种语句是最慢的,因为浏览器没有针对它们的原生方法。但是,一些浏览器的新版本,增加了querySelector()和querySelectorAll()方法,因此会使这类选择器的性能有大幅提高。

最后是不同选择器的性能比较图。
性能比较图
可以看到,ID选择器遥遥领先,然后是标签选择器,第三是Class选择器,其他选择器都非常慢。

3. 理解子元素和父元素的关系

下面六个选择器,都是从父元素中选择子元素。你知道哪个速度最快,哪个速度最慢吗?

1
2
3
4
5
6
$( '.child' , $parent)
  $parent.find( '.child' )
  $parent.children( '.child' )
  $( '#parent > .child' )
  $( '#parent .child' )
  $( '.child' , $( '#parent' ))

我们一句句来看。

(1) $(‘.child’, $parent)

这条语句的意思是,给定一个DOM对象,然后从中选择一个子元素。jQuery会自动把这条语句转成$.parent.find(‘child’),这会导致一定的性能损失。它比最快的形式慢了5%-10%。

(2) $parent.find(‘.child’)

这条是最快的语句。.find()方法会调用浏览器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速度较快。

(3) $parent.children(‘.child’)

这条语句在jQuery内部,会使用$.sibling()和javascript的nextSibling()方法,一个个遍历节点。它比最快的形式大约慢50%。

(4) $(‘#parent > .child’)

jQuery内部使用Sizzle引擎,处理各种选择器。Sizzle引擎的选择顺序是从右到左,所以这条语句是先选.child,然后再一个个过滤出父元素#parent,这导致它比最快的形式大约慢70%。

(5) $(‘#parent .child’)

这条语句与上一条是同样的情况。但是,上一条只选择直接的子元素,这一条可以于选择多级子元素,所以它的速度更慢,大概比最快的形式慢了77%。

(6) $(‘.child’, $(‘#parent’))

jQuery内部会将这条语句转成$(‘#parent’).find(‘.child’),比最快的形式慢了23%。

所以,最佳选择是$parent.find(‘.child’)。而且,由于$parent往往在前面的操作已经生成,jQuery会进行缓存,所以进一步加快了执行速度。

具体的例子和比较结果,请看这里。

4. 不要过度使用jQuery

jQuery速度再快,也无法与原生的javascript方法相比。所以有原生方法可以使用的场合,尽量避免使用jQuery。

请看下面的例子,为a元素绑定一个处理点击事件的函数:

1
2
3
$( 'a' ).click( function (){
  <strong>alert($( this ).attr( 'id' ));</strong>
  });

段代码的意思是,点击a元素后,弹出该元素的id属性。为了获取这个属性,必须连续两次调用jQuery,第一次是$(this),第二次是attr(‘id’)。

事实上,这种处理完全不必要。更正确的写法是,直接采用javascript原生方法,调用this.id:

1
2
3
$( 'a' ).click( function (){
  <strong>alert( this .id);</strong>
  });

根据测试,this.id的速度比$(this).attr(‘id’)快了20多倍。

5. 做好缓存

选中某一个网页元素,是开销很大的步骤。所以,使用选择器的次数应该越少越好,并且尽可能缓存选中的结果,便于以后反复使用。

比如,下面这样的写法就是糟糕的写法:

1
2
jQuery( '#top' ).find( 'p.classA' );
  jQuery( '#top' ).find( 'p.classB' );

更好的写法是:

1
2
3
<strong> var cached = jQuery( '#top' );</strong>
  cached.find( 'p.classA' );
  cached.find( 'p.classB' );

根据测试,缓存比不缓存,快了2-3倍。

6. 使用链式写法

jQuery的一大特点,就是允许使用链式写法。

1
$( 'div' ).find( 'h3' ).eq(2).html( 'Hello' );

采用链式写法时,jQuery自动缓存每一步的结果,因此比非链式写法要快。根据测试,链式写法比(不使用缓存的)非链式写法,大约快了25%。

7. 事件的委托处理(Event Delegation)

javascript的事件模型,采用”冒泡”模式,也就是说,子元素的事件会逐级向上”冒泡”,成为父元素的事件。

利用这一点,可以大大简化事件的绑定。比如,有一个表格(table元素),里面有100个格子(td元素),现在要求在每个格子上面绑定一个点击事件(click),请问是否需要将下面的命令执行100次?

1
2
3
$( "td" ).bind( "click" , function (){
  $( this ).toggleClass( "click" );
  });

回答是不需要,我们只要把这个事件绑定在table元素上面就可以了,因为td元素发生点击事件之后,这个事件会”冒泡”到父元素table上面,从而被监听到。
因此,这个事件只需要在父元素绑定1次即可,而不需要在子元素上绑定100次,从而大大提高性能。这就叫事件的”委托处理”,也就是子元素”委托”父元素处理这个事件。

具体的写法有两种。第一种是采用.delegate()方法:

1
2
3
$( "table" ).delegate( "td" , "click" , function (){
  $( this ).toggleClass( "click" );
  });

第二种是采用.live()方法:

1
2
3
4
5
$( "table" ).each( function (){
  $( "td" , this ).live( "click" , function (){
  $( this ).toggleClass( "click" );
  });
  });

这两种写法基本等价。唯一的区别在于,.delegate()是当事件冒泡到指定的父元素时触发,.live()则是当事件冒泡到文档的根元素后触 发,因此.delegate()比.live()稍快一点。此外,这两种方法相比传统的.bind()方法还有一个好处,那就是对动态插入的元素也有 效,.bind()只对已经存在的DOM元素有效,对动态插入的元素无效。

根据测试,委托处理比不委托处理,快了几十倍。在委托处理的情况
下,.delegate()又比.live()大约快26%。

8. 少改动DOM结构

(1)改动DOM结构开销很大,因此不要频繁使用.append()、.insertBefore()和.insetAfter()这样的方法。

如果要插入多个元素,就先把它们合并,然后再一次性插入。根据测试,合并插入比不合并插入,快了将近10倍。

(2)如果你要对一个DOM元素进行大量处理,应该先用.detach()方法,把这个元素从DOM中取出来,处理完毕以后,再重新插回文档。根据测试,使用.detach()方法比不使用时,快了60%。

(3)如果你要在DOM元素上储存数据,不要写成下面这样:

1
2
var elem = $( '#elem' );
  <strong>elem.data(key,value);</strong>


而要写成

1
2
var elem = $( '#elem' );
  <strong>$.data(elem,key,value);</strong>


根据测试, 后一种写法要比前一种写法,快了将近10倍。因为elem.data()方法是定义在jQuery函数的prototype对象上面的, 而$.data()方法是定义jQuery函数上面的,调用的时候不从复杂的jQuery对象上调用,所以速度快得多。(此处可以参阅下面第10点。)

9. 正确处理循环

循环总是一种比较耗时的操作,如果可以使用复杂的选择器直接选中元素,就不要使用循环,去一个个辨认元素。

javascript原生循环方法for和while,要比jQuery的.each()方法快,应该优先使用原生方法。

10. 尽量少生成jQuery对象

每当你使用一次选择器(比如$(‘#id’)),就会生成一个jQuery对象。jQuery对象是一个很庞大的对象,带有很多属性和方法,会占用不少资源。所以,尽量少生成jQuery对象。

举例来说,许多jQuery方法都有两个版本,一个是供jQuery对象使用的版本,另一个是供jQuery函数使用的版本。下面两个例子,都是取出一个元素的文本,使用的都是text()方法。你既可以使用针对jQuery对象的版本:

1
2
var $text = $( "#text" );
  <strong> var $ts = $text.text();</strong>


也可以使用针对jQuery函数的版本:

1
2
var $text = $( "#text" );
  <strong> var $ts = $.text($text);</strong>


由于后一种针对jQuery函数的版本不通过jQuery对象操作,所以相对开销较小,速度比较快。

(完)

原文:阮一峰

jQuery——jQuery基本概念 文章目录jQuery基本概念为什么要学习jQuery?jQuery初体验什么是jQuery?jQuery的版本jQuery的入口函数jQuery对象与DOM对象的区别(重点)DOM对象转换成jQuery对象:jQuery对象转换成DOM对象:练习:隔行变色案例 jQuery基本概念 学习目标:学会如何使用jQuery,掌握jQuery的常用api,能够使用jQuery实现常见的效果。 为什么要学习jQuery? 【01-让div显示与设置内容.html】 使用javascript开发过程中,有许多的缺点 阅读详情

相关推荐

机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾

f作者: 寒小阳 &&龙心尘 时间:2015年10月。 出处: 声明:版权所有,转载请注明出处,谢谢。手把手机器学习之逻辑回归应用——Kaggle泰坦尼克之灾1.引言先说一句,年末双十一什么的一来,真是非(mang)常(cheng)欢(gou)乐(le)!然后push自己抽出时间来写这篇blog的原因也非常简单: 写完前两篇逻辑回归的介绍和各个角度理解之后,小伙伴们纷纷表示『好像很高级的样纸,

寒小阳 43万+

jQuery最佳实践

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34149796的博客 307

中国主要湖泊水库面状矢量边界图层ArcGIS应用实战:从数据获取到专题图制作

本文详细介绍了中国主要湖泊水库面状矢量边界图层在ArcGIS中的实战应用,从数据获取到专题图制作的全流程。涵盖官方数据源、科研机构共享数据及商业平台的选择,以及ArcGIS中的数据处理、拓扑错误修正和专题图设计技巧,帮助用户高效完成湖泊水库的空间分析与可视化。

weixin_33672400的博客 250

阮一峰:jQuery官方基础教程笔记

jQuery是目前使用最广泛的javascript函数库。  据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库。微软公司甚至把jQuery作为他们的官方库。  对于网页开发者来说,学会jQuery是必要的。因为它让你了解业界最通用的技术,为将来学习更高

1314

初级文章【西门子】字符拼接成字符串

针对S7-400极其以下PLC,1200往上据说有专门的块了呢,首先,我是不用库的,需要什么函数会自己写,OK进入正题。 首先,我们有一个DB块,里面有14个char,一个14位的char数组和一个14位的string。如下图。 我们的目的是将char1-char10拼接成一个string。 第一种方式:第一步,将char放进数组。 ​​​​​​​ 相信大家都能看明白,但是我还是要解释解释 L取值2 T赋值到临时变量DBNO(INT) OPN DB [#DBNO]获取DB块,这一句.

NS_Speak(IVAV) 1万+

基于Autoware制作高精地图(一)

基于Autoware制作高精地图(一) ​开始进入正题,也是最近在忙的一件事,制作高精地图。 高精地图的制作大概分为以下四个流程(不一定完全正确): 1.构建点云地图; 2.点云地图标注; 3.制作OpenDrive地图; 4.地图存储索引。 这篇文章主要讲解如何构建点云地图。 首先我们要有一段自己录制的激光雷达点云数据,这里推荐大家采用Velodyne16线激光雷达,因为这里我们构建的点云底图是三维的,而采用Velodyne而不是速腾聚创(rslidar)等其他品牌的原因是Autoware里面有一个选项是

weixin_44570248的博客 7797

阮一峰JavaScript教程读书笔记——异步操作

阮一峰JavaScript教程读书笔记——异步操作 1. 单线程模型 JavaScript单线程(为了避免浏览器复杂性,锁机制),不代表 JavaScript 引擎只有一个线程。JavaScript 引擎有多个线程,单个脚本只能在一个线程上运行(称为主线程),其他线程都是在后台配合。 常见的浏览器无响应(假死),往往就是因为某一段 JavaScript 代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。 如果排队是因为计算量大,CPU 忙不过来,倒也算了,但是很多时候 CPU 是闲

qq_40423135的博客 756

华为OD机试 新系统真题 【数字系统转换器】

华为OD机试 新系统真题【数字系统转换器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【数字系统转换器】多语言题解。

qq_45776114的博客 538

借鉴--阮一峰博客之Jquery设计思想

jquery常用方法——阮一峰博客借鉴 由于自身以前一直只是止步于看别人的博客,这是我的第一篇博客(感觉好高大上),这次博客我是借鉴于阮一峰网络日志关于Jquery设计思想的部分。 首先关于此篇博客我们能学到很多实用性的东西,我认为我们把这篇当作一个简单的使用手册也不为过,下面步入正题。

糖果的幸福 598

手把手教你学Simulink——基于电机驱动系统的场景实例:轮毂电机在电动汽车中的分布式驱动控制仿真

本文详细介绍了基于MATLAB/Simulink和Simscape Electrical的电动汽车轮毂电机分布式驱动控制系统建模方法。内容包括系统结构设计(轮毂电机、逆变器、控制器等模块)、完整的建模过程(从基础模块导入到车辆动力学建模)、控制器设计与转矩分配策略实现,以及仿真参数设置与结果分析。通过仿真验证了该分布式驱动系统在速度跟踪、转弯性能等方面的优异表现,为电动汽车驱动系统的研究与开发提供了有效的仿真验证平台。文中还提供了相关代码示例和资料推荐,是学习Simulink电机控制系统建模的实用指南。

MHD0815的博客 4914

ABAP Development Tool for Visual Studio Code 里使用 MCP server

本文讨论了SAP ABAP开发环境中,除GitHub Copilot外,其他可作为MCP客户端接入ABAP开发工具(MCP server)的编码代理(coding agent)。GitHub Copilot是官方确认可用的工具,而其他代理如Claude Code、Cursor、Windsurf Cascade、Cline和Continue虽然理论上支持MCP协议,但要实际用于ABAP开发还需满足两个关键条件:兼容MCP协议,并能处理VS Code虚拟工作区文件系统。这些工具需要单独验证是否支持ABAP开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 252

JQuery笔记

JQuery简介 一。JQUERY学习重点: 1.熟练背诵JQUERY[选择器和过滤器]语法 2.熟练掌握【JQUERY对象】提供【功能函数】 二。jquery学习方式 1.一天理论介绍 2.分段提供jquery练习内容 三。JQUERY技术介绍: 1.就是JavaScript的封装版 2.简化JavaScript对DOM对象定位以及对DOM对象属性操作开发步骤 四。JQUERY使用: 1.下载jquery工具文件,并导入到工程中. 2.将jquery文

Li某人_初学者 2069

FPGA入门200例(17):如何阅读RTL原理图(Schematic)?将Verilog代码与门级电路对应

本文针对FPGA开发新手常见误区,重点讲解了RTL原理图的重要性和阅读方法。文章指出,仅通过仿真验证代码会导致板级测试异常,而RTL原理图能直观呈现Verilog代码对应的硬件结构(门电路、寄存器、多路选择器等)。通过"识别基础元件→跟踪信号路径→验证逻辑关系"的三步法,新手可以建立代码与硬件的映射思维,排查冗余逻辑、意外锁存器等错误。文章还结合Vivado/Quartus工具操作指南和典型代码案例,帮助读者掌握从代码到硬件实现的转换过程,避免混淆RTL与门级原理图、忽略信号位宽等常见误

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 195

JS和jQuery的区别(超级详细)

jquery和js的区别是什么? 一、首先来看一下jQuery和js的概念 jquery是一个快速、简洁的JavaScript库,极大的简化了javascript编程。 js是一种脚本语言,常用于网页客户端编程,使网页在客户端浏览器中,实现更多地动态功能,表现出更加丰富的视觉效果。 所以,最本质的区别就是js是一种语言,而jQuery是基于该语言的一种框架。除却最本质的区别还有一些用法上的差别。 ...

岛田悠米 5620

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jQuery——jQuery学习笔记(完整版)

本文主要介绍有关jQuery的相关知识点

Bonsoir777的博客 1799

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jquery-cropper:终极jQuery图像裁剪插件完整指南

jquery-cropper是一款基于Cropper.js的jQuery图像裁剪插件,它为网页开发者提供了简单而强大的图像裁剪解决方案。无论是头像上传、照片编辑还是图片处理,这款插件都能帮助你轻松实现专业级的图像裁剪功能。 ## 为什么选择jquery-cropper? 在众多图像裁剪工具中,jquery-cropper脱颖而出的原因有以下几点: - **简单易用**:作为jQuery插件,

gitblog_00114的博客 1118

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JQuery校验

JQUERY校验: 1、

抽象的类 517

jQuery简介、引入jQuery、jQuery核心函数、jQuery对象、jQuery对象操作class、addclass补充、jQuery对象复制——jQuery

jQuery简介、引入jQuery、jQuery核心函数、jQuery对象、jQuery对象操作class、addclass补充、jQuery对象复制

weixin_70320000的博客 3734

jQuery.Turbolinks与其他jQuery插件的兼容性测试:哪些插件可以完美配合

想要在Turbolinks项目中实现无缝的页面切换体验吗?jQuery.Turbolinks插件正是解决jQuery事件绑定问题的终极方案!这个简单的jQuery插件能够修复由Turbolinks引起的绑定事件问题,让您的jQuery代码在Turbolinks环境下正常工作。但对于许多开发者来说,最关心的问题是:jQuery.Turbolinks究竟能与哪些jQuery插件完美配合使用? ##

gitblog_00022的博客 993

JS与JQuery区别

JS和JQUERY的区别 ①.根据ID取元素 { JS:取到的是一个DOM对象。   例:var div = document.getElementByID(“one”); JQUERY:取到的是一个JQUERY对象。   例:var div = $("#one");——括号里面是根据某个东西来找,相当于一个选择,如果我们要根据ID来找,在样式表里的ID是用#来表示的,所以在这里我们直接带入井号,...

zhangankang的博客 174

jquery 的模块化

最近在威客上接了个任务,想起来还是觉得对不住那位雇主。我就一半路学PHP打酱油的,全自学,也就只做过一个完整的小网站。这个任务网站完全是东拼西凑弄的。自己看着那些前台后台的代码都不想看第二次。 入正题吧,我以前的JS代码都是使用JQUERY,也是没有什么章法,就是一个 $('#aa').click(){ } 随便放在一个地方都运行就行。我看那个PINPHP的JUQERY代码就感觉很好,虽然很多代

cxmove的专栏 2058

jQuery解析xml的两种方法

第一种方案(最稳妥): 先将String格式的xml转换为xml对象,然后再用Jquery解析xml对象 var returnDataXml = parseXML(returnData); var param = $(returnDataXml).find("param"); for(i=0;i<param .length;i++){ var paramName = $(param[i]).attr("name"); var rDescription = $(param[i]).

图图小淘气的博客 2351

jquery监听input值变化_jQuery入门教程-Jquery实战讲解

不会闲聊!!!不会扯淡!!!小UP只会分享与Java相关的学习资源本套视频共计时长四小时三十二分钟,循序渐进地对jQuery的各种选择器、函数和方法调用进行了详细的讲解,更结合了大量的案例。jQuery详细学习教程来啦 _jQuery_Jquery教程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com看完视频想要资料的小伙伴 速速保存:网盘链接:https://...

weixin_39866874的博客 171

【jQuery】jQuery概述及jQuery的原理_01

jQuery是一款优秀的JavaScript库,jQuery设计者的宗旨是“write less,do more”,即少写代码,多做事。那在使用jQuery完成比较复杂的页面开发时,可以快速的获取DOM元素,并且快速的修改DOM元素的样式,这比使用原生的JS简单多了,而且jQuery还提供了一些实现动画及特效的函数,可以快速实现复杂的用户交互效果,用起来是很爽的!.........

青春木鱼的博客 1635

jQuery Smart Wizard:终极jQuery步骤向导插件完整指南

在现代Web开发中,**jQuery Smart Wizard** 是一款功能强大且易于使用的步骤向导插件,能够为您的表单、注册流程、结账页面等创建美观且用户友好的多步骤界面。这款jQuery步骤向导插件不仅提供了完整的导航控制,还支持表单验证、Ajax内容加载、键盘导航等高级功能,让您的用户体验更加流畅和专业。 ## 🚀 为什么选择jQuery Smart Wizard? **jQuery

gitblog_00229的博客 357
上一篇: struts2.xml 配置
badlearner
博客等级 码龄14年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值