javascript - jquery .one() 计算会检查每个事件吗?
问题描述
因此增加了一点计算负载?
对于那些不熟悉.one() jquery 函数的人来说,它基本上只触发一次事件。例如,如果您想在第一次滚动页面时添加一个 div。
为了说明这件事的背景,我遇到了这个问题:
我曾参与过必须添加数百或数千个事件的项目,所以对我来说优化计算能力总是非常重要的,另外,我是一个好奇的人,所以我只需要知道。
该人使用香草javascript的答案之一基本上是一个无限循环,您在第一个实例上切换一个布尔值,并且基本上必须不断输入该函数以查看它是否已被触发。
var xxx;
$(window).scroll(function () {
if(!xxx)
{
xxx = true;
var div = $("#myDiv");
alert(div.height());
}
});
我的想法是 jquery 在页面上已经很重了,它可能只是在后台执行相同的操作,但我想完全确定我未来的实现。
解决方案
不,jQuery 的.one
工作方式类似于,例如:
- 调用
addEventListener
,然后在回调中调用removeEventListener
- 在选项对象中调用
addEventListener
with{ once: true }
- 在 jQuery 中,例如调用
.on
,然后在回调中调用.off
一旦监听器运行一次,它就会被解除连接;当事件在未来发生时,不会发生进一步的逻辑,因为监听器根本不再连接。
所以对计算资源.one
非常轻,即使你添加了很多很多.one
s。
你可以看到one
这里的源代码:
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);
});
wherejQuery()
返回一个 jQuery 集合,其中包含与当前选择器匹配的元素。当被调用时,回调被包装在另一个函数执行后立即one
调用的回调中。.off
您链接到的答案中的示例代码效率很低,不应该使用,尤其是对于scroll
非常频繁触发的事件。
推荐阅读
- azure - Get-AzRecoveryServicesBackupItem:无法验证参数“容器”上的参数。参数为 null 或为空
- asp.net-core - 如何将 Identity server 4.0 添加为外部提供者?
- laravel - Laravel 8 - Envoyer 和 Homestead 部署问题
- solr - TYPO3 Solr:如何向索引器添加其他字段?
- python - datetime:获取带有时区偏移的时间戳
- android - Firebase Google Auth 无法在 Cordova Android 上运行
- git - GitLab 和 LFS 推送缺少文件
- javascript - 笑话:设置 URL 并检查变量
- c++ - C++ 对对象的引用是否类似于 C 中的双指针?
- nginx - 将 K8s 入口/负载均衡器绑定到 127.0.0.1 而不是 0.0.0.0