在jQuery初始化之前进行条件DOM检查的性能
Performance as it pertains to conditional DOM check before jQuery initialization?
这主要是一个性能问题,因为我有时在开发人员执行JavaScript的示例中看到它。
当涉及到更严格的语言,如C或Java时,条件对于防止执行需要非null数据的函数非常重要。通常,检查空值有助于防止程序的某些部分执行,从而最小化内存消耗(我知道这是一个肤浅的解释)。但是当涉及到JavaScript时,错误通常不会阻止脚本的其余部分执行。现在,在jQuery的情况下,初始化元素上的DOM行为要求CSS选择器至少返回一个结果。但是如果没有结果,则不会抛出错误。
我的问题是:在考虑这两个例子时,浏览器是否有任何性能或内存消耗差异:
案例1:在执行jQuery库函数之前检查DOM
var carousel = $('[data-carousel]');
if( carousel.length > 0) {
carousel.slick({
adaptiveHeight: true,
lazyLoad: 'progressive'
});
}
案例2:你执行jQuery库函数没有首先检查所需选择的存在
$('[data-carousel]').slick({
adaptiveHeight: true,
lazyLoad: 'progressive'
});
EDIT我想在这里概述几个假设,看看这是否会对如何回答这个问题产生显著的差异:
- 在执行之前不知道所需DOM元素的存在。
- 整个网站的每个页面都可以有一个或多个轮播(大约0-3)。
- 每个DOM元素都有额外的
data
属性,我检查并执行旋转木马行为更改(例如data-carousel-autoplay
修改并刷新在该DOM元素上初始化的旋转木马)。
比较JavaScript和其他语言非常赞赏!
为一个选择器调用两次jQuery比调用一次更糟糕。
var carousel = $("[data-carousel]");
if (carousel.length) {
carousel.slick({
adaptiveHeight: true,
lazyLoad: 'progressive'
});
}
当然你可以把工作推迟到DOM准备好了,要么把JavaScript代码放在<body>
的末尾,要么使用"ready"处理程序:
$(function() {
$("[data-carousel]").slick({
adaptiveHeight: true,
lazyLoad: 'progressive'
});
});
为选择器抓取一个jQuery对象,然后自己测试length
是否非零,或者让其他一些jQuery方法中的隐式迭代来做这件事,这两者之间没有真正的区别。可能会有一些差异,但我们可能谈论的是几个微秒,这几乎不可能有什么影响。
在DOM中查找内容后缓存jQuery对象与多次重复缓存jQuery对象之间的区别是更重要的性能考虑因素。jQuery没有内置缓存
在对其进行操作之前测试它是否存在将会在性能上产生非常小的差异,小到您不应该使用它来决定采用哪条路径,而应该使用更干净和/或更易于阅读/维护的路径。
正确编写的jQuery插件和方法(getter和过滤器除外)如下所示:
$.fn.theModule = function () {
return this.each(function () {
...
})
}
所以,如果没有选择元素,它只是返回this
,因为没有任何东西可供每个元素迭代。显然,这将有一个小的(不明显的)性能影响,因为它运行更多的代码比简单地检查数组的长度,但这不会以任何明显的方式影响你的用户或你的UI性能。
这些都假设您只选择了一次元素,比如@Pointy的第一个代码片段。选择两次显然会变慢,甚至可能在大的dom上以明显的方式。
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 通过js在新选项卡中有条件地打开url
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 如何在DOM元素上按类型构建此函数
- jQuery-有条件地附加HTML
- 根据某些条件在视图之间切换
- 如何在javascript DOM api中获取具有给定条件的子节点
- jQuery - 遍历 DOM 中的所有类,按间隔分配条件
- 在特定条件下尝试禁用DOM创建的按钮
- 使& # 39;dom-if& # 39;根据另一个元素中的属性检查条件
- 在jQuery初始化之前进行条件DOM检查的性能
- 如何有条件地添加属性到react DOM元素
- 用js DOM创建并注入条件注释
- 测试多个变量的条件?Dom Javascript
- 使用coffescript有条件地向dom添加表
- 如何在不满足条件时使用ngShow/ngHide隐藏DOM元素
- 向dom元素添加带条件的动态样式
- dom 事件的多个条件