jquery .one() 计算检查每个事件吗?
is jquery .one() computing checks every event?
因此增加了一点计算负载?
对于那些不熟悉 .one() jquery function 的人来说,它基本上只会触发一次事件。例如,如果您想在第一次滚动页面时添加 div。
为了了解这件事的背景,我遇到了这个问题:
How to alert when scroll page only first time using javascript?
我曾参与过必须添加数百或数千个事件的项目,因此对我而言,优化计算能力始终非常重要,而且,我是一个好奇的人,所以我只需要知道。
这个人使用香草 javascript 的答案之一基本上是一个无限循环,您在第一个实例中切换一个布尔值,基本上必须不断输入函数以查看它是否已经被触发。
var xxx;
$(window).scroll(function () {
if(!xxx)
{
xxx = true;
var div = $("#myDiv");
alert(div.height());
}
});
我的想法是 jquery 在页面上已经很重了,它可能只是在后台执行相同的操作,但我想完全确定我未来的实现。
没有。 jQuery 的 .one
的工作方式类似于,例如:
- 调用
addEventListener
,然后在回调中调用 removeEventListener
- 在选项对象中用
{ once: true }
调用 addEventListener
- 在jQuery中调用
.on
,然后在回调中调用.off
一旦侦听器运行一次,它就会被解除附加;当事件在未来发生时,不再发生进一步的逻辑,因为侦听器根本不再连接。
所以 .one
对计算资源 非常轻,即使你添加了很多很多 .one
s。
可以看到one
的源码 here:
if (one === 1) {
origFn = fn;
fn = function (event) {
// Can use an empty set, since event contains the info
jQuery().off(event); // <-------------------------------------------------
return origFn.apply(this, arguments);
};
// Use same guid so caller can remove using origFn
fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
}
return elem.each(function () {
jQuery.event.add(this, types, fn, data, selector);
});
其中 jQuery()
returns jQuery 包含与当前选择器匹配的元素的集合。当 one
被调用时,回调被包装在另一个调用 .off
的函数中。
您链接到的答案中的示例代码效率很低,不应使用,尤其是对于触发非常频繁的 scroll
事件。
因此增加了一点计算负载?
对于那些不熟悉 .one() jquery function 的人来说,它基本上只会触发一次事件。例如,如果您想在第一次滚动页面时添加 div。
为了了解这件事的背景,我遇到了这个问题:
How to alert when scroll page only first time using javascript?
我曾参与过必须添加数百或数千个事件的项目,因此对我而言,优化计算能力始终非常重要,而且,我是一个好奇的人,所以我只需要知道。
这个人使用香草 javascript 的答案之一基本上是一个无限循环,您在第一个实例中切换一个布尔值,基本上必须不断输入函数以查看它是否已经被触发。
var xxx;
$(window).scroll(function () {
if(!xxx)
{
xxx = true;
var div = $("#myDiv");
alert(div.height());
}
});
我的想法是 jquery 在页面上已经很重了,它可能只是在后台执行相同的操作,但我想完全确定我未来的实现。
没有。 jQuery 的 .one
的工作方式类似于,例如:
- 调用
addEventListener
,然后在回调中调用removeEventListener
- 在选项对象中用
{ once: true }
调用addEventListener
- 在jQuery中调用
.on
,然后在回调中调用.off
一旦侦听器运行一次,它就会被解除附加;当事件在未来发生时,不再发生进一步的逻辑,因为侦听器根本不再连接。
所以 .one
对计算资源 非常轻,即使你添加了很多很多 .one
s。
可以看到one
的源码 here:
if (one === 1) {
origFn = fn;
fn = function (event) {
// Can use an empty set, since event contains the info
jQuery().off(event); // <-------------------------------------------------
return origFn.apply(this, arguments);
};
// Use same guid so caller can remove using origFn
fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
}
return elem.each(function () {
jQuery.event.add(this, types, fn, data, selector);
});
其中 jQuery()
returns jQuery 包含与当前选择器匹配的元素的集合。当 one
被调用时,回调被包装在另一个调用 .off
的函数中。
您链接到的答案中的示例代码效率很低,不应使用,尤其是对于触发非常频繁的 scroll
事件。