jQuery:一次失败的优化尝试
我经常抱怨jQuery的DOM操作性能并不优秀,并且经常尝试用一些方法去进行优化,但是越是优化,越是沮丧地发现jQuery其实已经做得很好,从使用者的角度能够进行的优化实在有限(这并不意味着jQuery的性能是优秀的, 反之只能说它是一个相对封闭的库,无法从外部介入进行优化)。这篇文章就记录一次失败的优化经历。
优化思想
这一次优化的思想来自于数据库。在数据库优化的时候,我们常会说“将大量的操作放在一个事务中一起提交,能有效提高效率”。虽然对数据库不了解的我并不知道其原因,但是“事务”的思想却为我指明了方向(虽然是错的……)。
因此我尝试将“事务”这一概念引入到jQuery中,通过“打开”和“提交”事务,从外部对jQuery进行一些优化,其最重要的在于减少each函数的循环次数。
众所周知,jQuery的DOM操作,以get all, set first为标准,其中用于设置DOM属性/样式的操作,几乎都是对选择出来的元素的一次遍历,jQuery.access函数就是其中最核心的部分,其中用于循环的代码如下:
// Setting one attribute
if ( value !== undefined ) ...{
// Optionally, function values get executed if exec is true
exec = !pass && exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) ...{
fn(
elems[i],
key,
exec ? value.call(elems[i], i, fn(elems[i], key)) : value,
pass
);
}
return elems;
}
比如jQuery.fn.css函数就是这样的:
jQuery.fn.css = function( name, value ) {
// Setting 'undefined' is a no-op
if ( arguments.length === 2 && value === undefined ) {
return this;
}
return jQuery.access( this, name, value, true, function( elem, name, value ) {
return value !== undefined ?
jQuery.style( elem, name, value ) :
jQuery.css( elem, name );
});
};
因此,下面这样的代码,假设被选择的div元素有5000个,则要循环访问10000个节点:
而在我的想法中,在一个“事务”中,可以如数据库的操作一般,通过保存所有的操作,在“提交事务”的时候统一进行,将10000次节点访问,减少至5000次,相当于提升了“1倍”的性能。
分享到:
相关推荐
1. **识别用户**:为了确保用户只能投一次票,我们需要一种方式来识别不同的用户。在Web环境中,最常用的方法是通过Cookie。Cookie是由服务器设置并存储在用户浏览器中的小文本文件,可以包含特定的标识符。在投票...
这篇文章就记录一次失败的优化经历。 优化思想 这一次优化的思想来自于数据库。在数据库优化的时候,我们常会说“将大量的操作放在一个事务中一起提交,能有效提高效率”。虽然对数据库不了解的我并不知道其原因,...
它是一种优化策略,只在图片即将进入浏览器视口时才加载,而非一次性加载所有图片。jQuery Lazyload 插件正是实现这一功能的强大工具。 **一、jQuery Lazyload 插件简介** jQuery Lazyload 是一个轻量级的 ...
例如,当导出失败时,可以显示友好的错误信息,引导用户更新浏览器或尝试其他方式。 总结,`jquery.wordexport.js`是一个实用的JavaScript库,能够帮助开发者轻松实现网页内容的Word导出功能。通过理解其基本使用...
这个实例是基于jQuery库和ASP.NET后端技术构建的,旨在提供类似QQ空间图片上传的用户体验,让用户可以方便快捷地一次性上传多个文件。在本文中,我们将深入探讨jQuery批量上传的工作原理、实现方式以及与ASP.NET的...
这段代码首先尝试加载谷歌CDN中的jQuery库文件,如果加载失败,则从本地服务器加载相同的文件。这种方式既充分利用了谷歌CDN的优势,又避免了因无法访问Google服务而导致的问题。 #### 六、结论 综上所述,使用...
这段代码首先检查浏览器是否支持Geolocation API,如果支持,则尝试获取当前用户的经纬度,成功后在控制台打印出来,如果获取失败或被用户拒绝,会显示相应的错误信息。 然而,由于JavaScript运行在客户端,可能受...
"jQuery显示扇形插件"是一种用于在网页中创建动态扇形效果的工具,它基于JavaScript库jQuery构建,能够帮助开发者轻松实现各种视觉上引人注目的...记得在实践中不断尝试和优化,才能真正地把这种插件运用得游刃有余。
本资源"jquery删除确认提示信息框.zip"显然关注的是如何在网页应用中实现一个功能,即在用户尝试删除数据时显示一个确认提示信息框。这种功能在用户界面设计中非常重要,因为它可以防止意外的数据丢失,并提高用户...
在网页设计和开发中,jQuery 是一个非常流行的 JavaScript 库,它简化了DOM操作、事件处理、动画制作等任务。"jQuery 弹出层登录"是网页交互设计中常见的功能,用于在用户需要进行登录操作时,以弹出窗口的形式显示...
在移动设备上构建一个响应式的评论表单是现代网页开发中的关键部分,因为这能确保用户在各种屏幕尺寸上都能获得良好的交互体验...记住,实践是检验真理的唯一标准,动手尝试并不断优化你的代码,才能真正掌握这一技能。
这段配置表示,RequireJS首先尝试从CDN加载jQuery,如果失败则尝试加载本地的jQuery。在构建环境中,可以通过工具(如r.js)进一步优化,例如创建一个`build.js`配置文件,指定CDN加载失败后的本地路径: ```...
**jQuery无刷新验证及数据绑定** 在Web应用中,用户交互体验是至关重要的,而无刷新验证和数据绑定正是提升这种体验的有效手段。jQuery库以其简洁的API和强大的功能,使得开发者可以轻松实现这些功能。在VS2008环境...
jQuery,一个流行的JavaScript库,提供了丰富的功能来简化这一过程。本文将深入探讨jQuery实现表单验证的方法和技巧,帮助你理解和应用相关知识。 首先,了解jQuery的核心概念是必要的。jQuery通过简洁的API简化了...
5. 如果失败,可能显示错误提示并允许用户重新尝试。 ### 五、CSS样式 `css`目录下的文件用于定义滑块验证插件的外观。这可能包括滑块的形状、颜色、大小以及验证成功或失败时的反馈样式。通过CSS,开发者可以...
JavaScript验证和jQuery的结合使用是前端开发中常见的一种技术手段,它使得客户端的数据验证更加便捷高效。在网页应用中,为了提高用户体验并减轻服务器压力,通常会在用户提交数据前进行客户端验证,确保输入符合...
在本项目中,"jQuery手势图案密码...综上所述,"jQuery手势图案密码设置代码"项目涵盖了前端开发的多个方面,包括DOM操作、事件处理、CSS样式设计、数据处理以及用户体验优化等,是学习和实践Web开发的一个良好示例。
1. **分页加载**:将大量数据分割成小块,在用户滚动或者展开节点时按需加载,降低一次性加载的数据量,减少阻塞。 2. **预加载机制**:预测用户可能需要的数据,提前进行加载,提高响应速度。 3. **缓存利用**:...
同时,记得清理表单中的输入,以准备下一次的登录尝试。 总结来说,"js+jquery登录框"项目涉及到的主要知识点包括: 1. JavaScript基础:事件处理、DOM操作。 2. jQuery库的使用:选择器、事件绑定、动画方法、...