gpt4 book ai didi

javascript - 与 jQuery 初始化之前的条件 DOM 检查有关的性能?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:32:17 25 4
gpt4 key购买 nike

这主要是一个性能问题,因为我有时会在开发人员执行 JavaScript 的示例中看到它。

当涉及到更严格的语言(如 C 或 Java)时,条件对于防止执行需要 not 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'
});

编辑 我想在这里概述几个假设,看看这是否会对这个问题的回答方式产生任何值得注意的差异:

  1. 执行前不知道所需 DOM 元素是否存在。
  2. 整个网站的每一页都可能有一个或多个轮播(大约 0-3 个)。
  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> 的末尾。或者使用“就绪”处理程序:

$(function() {
$("[data-carousel]").slick({
adaptiveHeight: true,
lazyLoad: 'progressive'
});
});

为选择器抓取一个 jQuery 对象,然后自己测试一下是否是 length 并没有真正的区别。是非零的,或者让其他一些 jQuery 方法中的隐式迭代来完成。可能存在一些差异,但我们可能谈论的是少量微秒,而且这不太可能重要。

在查找 DOM 中的内容后缓存 jQuery 对象与重复多次它之间的区别是一个更重要的性能考虑因素。 jQuery 中没有内部缓存。

关于javascript - 与 jQuery 初始化之前的条件 DOM 检查有关的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com