尽量使用最新版本的jQuery类库

发布时间:2026/7/11 16:27:41

尽量使用最新版本的jQuery类库
Query项目中使用了大量的创新。最好的方法来提高性能就是使用最新版本的jQuery。每一个新的版本都包含了优化的bug修复。对我们来说唯一要干的就是修改tag何乐而不为呢我们也可以使用免费的CDN服务例如 Google来存放jQuery类库。!-- Include a specific version of jQuery -- script srchttp://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js/script !-- Include the latest version in the 1.6 branch -- script srchttp://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js/script2. 使用简单的选择器直 到最近返回DOM元素的方式都是解析选择器字符串javascript循环和内建的javascript API例如getElementbyId()getElementsByTagName()getElementsByClassName()三种 方式的整合使用。但是现代浏览器都开始支持querySelectorAll()这个方法能够理解CSS查询器而且能带来显著的性能提升。然而我们应该避免使用复杂的选择器返回元素。更不用说很多用户使用老版本的浏览器强迫jQuery去处理DOM树。这个方式非常慢。$(li[data-selectedtrue] a) // Fancy, but slow $(li.selected a) // Better $(#elem) // Best选择id是最快速的方式。如果你需要使用class名称 那么你最好带上tag名称这样会更快些。特别是在老浏览器和移动设备上。访问DOM是javascript应用最慢的方式 因此尽量少使用。使用变量去保存选择器这样会使用cache来保存。性能更好。var buttons $(#navigation a.button); // Some prefer prefixing their jQuery variables with $: var $buttons $(#navigation a.button);另 外一个值得做的是jQuery给了你很多的额外便利选择器 例如:visible:hidden:animated还有其它这些不是合法的CSS3选择器。结果是你使用这些类库就不能有效地利用 querySelectorAll()方法。为了弥补这个问题你需要先选择元素再过滤如下$(a.button:animated); // Does not use querySelectorAll() $(a.button).filter(:animated); // Uses it3. 数组方式使用jQuery对象运行选择器的结果是一个jQuery对象。然而jQuery类库让你感觉你正在使用一个定义了index和长度的数组。// Selecting all the navigation buttons: var buttons $(#navigation a.button); // We can loop though the collection: for(var i0;ibuttons.length;i){ console.log(buttons[i]); // A DOM element, not a jQuery object } // We can even slice it: var firstFour buttons.slice(0,4);如果性能是你关注的那么使用简单for或者while循环来处理而不是$.each()这样能使你的代码更快。检查长度也是一个检查你的collection是否含有元素的方式。if(buttons){ // This is always true // Do something } if(buttons.length){ // True only if buttons contains elements // Do something }4. 选择器属性jQuery提供了一个属性这个属性显示了用来做链式的选择器。$(#container li:first-child).selector // #container li:first-child $(#container li).filter(:first-child).selector // #container li.filter(:first-child)虽然上面的例子针对同样的元素选择器则完全不一样。第二个实际上是非法的你不可以使用它来创建一个对象。只能用来显示filter方法是用来缩小collection。5. 创建一个空的jQuery对象创建一个新的jQuery空间能极大的减小开销。有时候你可能需要创建一个空的对象然后使用add()方法添加对象。var container $([]); container.add(another_element);这也是quickEach方法的基础你可以使用这种更快的方式而非each()。6. 选择一个随机元素上面我提到过jQuery添加它自己的选择器过滤。除了类库你可以添加自己的过滤器。只需要添加一个新的方法到$.expr[:]对象。一个非常棒的使用方式是Waldek Mastykarz的博客中提到的创建一个用来返回随机元素的选择器。你可以修改下面代码(function($){ var random 0; $.expr[:].random function(a, i, m, r) { if (i 0) { random Math.floor(Math.random() * r.length); } return i random; }; })(jQuery); // This is how you use it: $(li:random).addClass(glow);7. 使用CSS HooksCSS hooks API是提供开发人员得到和设置特定的CSS数值的方法。使用它你可以隐藏浏览器特定的执行并且使用一个统一的界面来存取特定的属性。、$.cssHooks[borderRadius] { get: function(elem, computed, extra){ // Depending on the browser, read the value of // -moz-border-radius, -webkit-border-radius or border-radius }, set: function(elem, value){ // Set the appropriate CSS3 property } }; // Use it without worrying which property the browser actually understands: $(#rect).css(borderRadius,5);更好的在于人们已经创建了一个支持CSS hooks类库8. 使用自定义的删除方法你可能听到过jQuery的删除插件它能够允许你给你的动画添加特效。唯一的缺点是你的访问者需要加载另外一个javascript文件。幸运的是你可以简单的从插件拷贝效果并且添加到jQuery.easing对象中如下$.easing.easeInOutQuad function (x, t, b, c, d) { if ((t/d/2) 1) return c/2*t*t b; return -c/2 * ((--t)*(t-2) - 1) b; }; // To use it: $(#elem).animate({width:200},slow,easeInOutQuad);9. $.proxy()使用callback方法的缺点之一是当执行类库中的方法后context被设置到另外一个元素例如div idpanel styledisplay:none buttonClose/button /div执行下面代码$(#panel).fadeIn(function(){ // this points to #panel $(#panel button).click(function(){ // this points to the button $(this).fadeOut(); }); });你将遇到问题button会消失不是panel。使用$.proxy方法你可以这样书写代码$(#panel).fadeIn(function(){ // Using $.proxy to bind this: $(#panel button).click($.proxy(function(){ // this points to #panel $(this).fadeOut(); },this)); });这样才正确的执行。$.proxy方法接受两个参数你最初的方法还有context。这里$.proxy in the docs.。10. 判断页面是否太过复杂一个非常简单的道理约复杂的页面加载的速度越慢。你可以使用下面代码检查一下你的页面内容console.log( $(*).length );以上代码返回的数值越小网页加载速度越快。你可以考虑通过删除无用多余的元素来优化你的代码11. 将你的代码转化成jQuery插件如果你要花一定得时间去开发一段jQuery代码那么你可以考虑将代码变成插件。这将能够帮助你重用代码并且能够有效的帮助你组织代码。创建一个插件代码如下(function($){ $.fn.yourPluginName function(){ // Your code goes here return this; }; })(jQuery);你可以在这里开发教程。12. 设置全局AJAX为缺省如果你开发ajax程序的话你肯定需要有”加载中“之类的显示告知用户ajax正在进行我们可以使用如下代码统一管理如下// ajaxSetup is useful for setting general defaults: $.ajaxSetup({ url : /ajax/, dataType : json }); $.ajaxStart(function(){ showIndicator(); disableButtons(); }); $.ajaxComplete(function(){ hideIndicator(); enableButtons(); }); /* // Additional methods you can use: $.ajaxStop(); $.ajaxError(); $.ajaxSuccess(); $.ajaxSend(); */详细你可以查看这篇文章:如何快速创建一个AJAX的加载的图片效果5个在线Ajax“加载中”旋转图标生成器工具13. 在动画中使用delay()方法链式的动画效果是jQuery的强大之处。但是有一个忽略了的细节就是你可以在动画之间加上delays如下// This is wrong: $(#elem).animate({width:200},function(){ setTimeout(function(){ $(#elem).animate({marginTop:100}); },2000); }); // Do it like this: $(#elem).animate({width:200}).delay(2000).animate({marginTop:100});jQuery动画帮了我们大忙否则我们得自己处理一堆的细节设置timtout处理属性值跟踪动画变化等等。大家可以参考这个文章jQuery animations14. 合理利用HTML5的Data属性HTML5的data属性可以帮助我们插入数据。特别合适前后端的数据交换。jQuery近来发布的data()方法可以有效的利用HTML5的属性来自动得到数据。下面是个例子div idd1 data-rolepage data-last-value43 data-hiddentrue data-options{name:John} /div为了存取数据你需要调用如下代码$(#d1).data(role); // page $(#d1).data(lastValue); // 43 $(#d1).data(hidden); // true; $(#d1).data(options).name; // John;

相关新闻

Kubernetes Secret 管理:能挂载不代表安全

Kubernetes Secret 管理:能挂载不代表安全

2026/7/11 16:22:23

Kubernetes Secret 管理:能挂载不代表安全 一、Secret 不是天然安全 Kubernetes Secret 很常用,数据库密码、API Token、证书都可能放在里面。但名字叫 Secret,不代表它天然安全。默认情况下,Secret 只是做了编码存储,…

俄罗斯已成立打击网络诈骗工作组,由一位副总理领导

俄罗斯已成立打击网络诈骗工作组,由一位副总理领导

2026/7/10 2:21:04

克里姆林宫的“反诈闪电战”:俄罗斯副总理挂帅,正式向网络犯罪宣战在过去几年里,电信诈骗和网络犯罪在全球范围内呈野蛮生长之势。在俄罗斯,这一问题同样愈演愈烈,甚至已经从单纯的治安问题,上升到了危害国…

高精度温度测控系统PCB设计实战:从布局规划到信号完整性保障

高精度温度测控系统PCB设计实战:从布局规划到信号完整性保障

2026/7/11 6:08:04

1. 高精度温度测控系统的PCB设计挑战在工业级高精度温度测控系统中,PCB设计直接决定了最终产品的测量精度和稳定性。与普通数字电路不同,这类系统需要处理微伏级别的PT100差分信号,同时还要应对工业环境中的电磁干扰。我在设计这类系统时&…

NBM7100A与PIC18F46K22实现纽扣电池高效管理方案

NBM7100A与PIC18F46K22实现纽扣电池高效管理方案

2026/7/11 16:23:03

1. 项目背景与核心需求 在低功耗物联网设备、可穿戴设备和工业传感器等应用中,不可充电的初级电池(如CR2032纽扣电池)常面临两个关键挑战:高脉冲电流需求导致的电压骤降,以及电池内部阻抗引起的能量浪费。传统方案直接…

Qwen3.6-27B-OptiQ-4bit震撼发布:Apple Silicon专属4-bit量化模型如何突破性能极限?

Qwen3.6-27B-OptiQ-4bit震撼发布:Apple Silicon专属4-bit量化模型如何突破性能极限?

2026/7/11 16:23:03

Qwen3.6-27B-OptiQ-4bit震撼发布:Apple Silicon专属4-bit量化模型如何突破性能极限? 【免费下载链接】Qwen3.6-27B-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Qwen3.6-27B-OptiQ-4bit Qwen3.6-27B-OptiQ-4bit是专为…

Meta 裁决限制员工言论自由,韦恩 - 威廉姆斯诉讼维权结果几何?

Meta 裁决限制员工言论自由,韦恩 - 威廉姆斯诉讼维权结果几何?

2026/7/11 16:23:03

韦恩 - 威廉姆斯无声出席海伊文学节5 月 31 日,莎拉韦恩 - 威廉姆斯(Sarah Wynn - Williams)作为嘉宾,与法学教授蒂姆吴(Tim Wu)和记者卡罗尔卡德瓦拉德(Carole Cadwalladr)一同登上…

STM32与MCP3202实现锂电池主动平衡控制方案

STM32与MCP3202实现锂电池主动平衡控制方案

2026/7/11 16:23:03

1. 项目背景与核心需求 在锂离子电池组应用中,串联电池之间的电压不平衡是一个常见但棘手的问题。当多个电池串联时,由于制造工艺差异、温度分布不均或老化程度不同,各单体电池的电压会出现偏差。这种不平衡如果长期存在,会导致部…

Qwen3.6-27B-OptiQ-4bit最佳实践:如何用mlx-optiq实现本地大模型高效微调?

Qwen3.6-27B-OptiQ-4bit最佳实践:如何用mlx-optiq实现本地大模型高效微调?

2026/7/11 16:23:03

Qwen3.6-27B-OptiQ-4bit最佳实践:如何用mlx-optiq实现本地大模型高效微调? 【免费下载链接】Qwen3.6-27B-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Qwen3.6-27B-OptiQ-4bit Qwen3.6-27B-OptiQ-4bit是基于mlx-opti…

解锁B站视频自由:用开源工具打造你的专属离线视频库

解锁B站视频自由:用开源工具打造你的专属离线视频库

2026/7/11 16:13:03

解锁B站视频自由:用开源工具打造你的专属离线视频库 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾经遇到过这样…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/10 22:32:48

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

2026/7/11 0:02:03

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字隐私日益重要的今天,微信聊天记录作为个人数字资产的重要组成…

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

2026/7/11 0:02:03

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载…

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

2026/7/11 0:02:03

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案 一、数据库备份最容易被忽略的问题,不是「有没有做备份」,而是「备份能不能恢复、恢复要多久、以及恢复后的数据对不对」 很多团队做数据库备份的方式是「写个 cron job&am…