gpt4 book ai didi

javascript - 对现有 jQuery 对象进行 jQuery 操作是否有成本?

转载 作者:行者123 更新时间:2023-11-29 19:26:02 26 4
gpt4 key购买 nike

我想知道在不首先检查 something 是否已经是 jQuery 实例的情况下懒惰地执行 $( something ) 是否有任何性能缺点?

我想到的用例是一个像下面这样的函数:

function foo( element ){
var $element = $( element );
// do something with $element...
}

如果您将一个 jQuery 实例传递给该函数,您是否正在用另一个 jQuery 实例重新包装一个 jQuery 实例?这对性能有影响吗(比如,经过多次迭代)?

foo( $( "#somediv" ) );

查看源代码(这个问题的 v 2.1.4),我们看到 jQuery.fn.init 检查传递给它的选择器,如果它不是字符串,则为 DOM元素或函数,然后我们只需将其传递给 jQuery.makeArray 并返回结果。

因此,如果选择器已经是 jQuery 实例,jQuery“构造函数”中似乎没有任何显式检查会短路。但这真的重要吗?

makeArray 使用merge 和/或push,所以有一些额外的处理,但它重要吗?

最佳答案

好吧,因为我似乎永远无法离开需要剃毛的 Yak,这里是 JSPerf test ,这似乎表明检查和短路而不是(意外地)重新包装 jQuery 实例可以将性能提高多达 30%。在我看来,这足以保证更丑陋的代码。

这是两个测试:

function noCheck(element) {
var $element = $(element);

$element.css("color", "red");
}

noCheck($("#somediv"));

function shortCircuit(element) {
var $element = element instanceof jQuery ? element : $(element);

$element.css("color", "red");
}

shortCircuit($("#somediv"));

根据 JSPerf,noCheck 的执行速度比 shortCircuit 慢 30%

JSFiddle 中尝试这段代码.

我暂时不会接受我的回答,以鼓励其他观点/测试等。

关于javascript - 对现有 jQuery 对象进行 jQuery 操作是否有成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763960/

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