Javascript jquery解除绑定事件速度提高

Javascript jquery解除绑定事件速度提高,javascript,jquery,Javascript,Jquery,我有一个很大的内容幻灯片页面,我正在制作,它开始使用很多事件触发器。还有大约一半的用户使用livequery插件 通过在幻灯片之间卸载这些事件,只有活动幻灯片才有绑定事件,我会看到速度提高吗 另外,原生livequery是否比livequery插件快得多?(因为它的功能肯定不那么强大) 我还想这样做: 是否也取消绑定livequery事件 我真的只需要知道卸载/加载一个事件侦听器需要多长时间,以及如果我让它们运行,它们会消耗多少个周期。此外,任何关于现场活动的信息都将非常棒。我需要更多详细信息

我有一个很大的内容幻灯片页面,我正在制作,它开始使用很多事件触发器。还有大约一半的用户使用livequery插件

通过在幻灯片之间卸载这些事件,只有活动幻灯片才有绑定事件,我会看到速度提高吗

另外,原生livequery是否比livequery插件快得多?(因为它的功能肯定不那么强大)

我还想这样做:

是否也取消绑定livequery事件


我真的只需要知道卸载/加载一个事件侦听器需要多长时间,以及如果我让它们运行,它们会消耗多少个周期。此外,任何关于现场活动的信息都将非常棒。

我需要更多详细信息来提供实际代码,但您可能希望了解:

事件委派是指在父对象上使用单个事件侦听器来侦听在其子对象(或更深层的子对象)上发生的事件。事件委派允许开发人员在应用程序中稀疏地使用事件监听器,同时当事件发生在高度特定的目标上时仍对其作出反应。事实证明,这是在事件丰富的web项目中保持高性能的关键策略,在这些项目中,创建数百个事件侦听器可能会快速降低性能

一个简单的例子:

假设您有一个包含图像的DIV,如下所示:

<div id="container">
    <img src="happy.jpg">
    <img src="sad.jpg">
    <img src="laugh.jpg">
    <img src="boring.jpg">
</div>
$('#container img').click(function() {
    performAction(this);
});
$('#container').click(function(e) {
    if($(e.target)[0].nodeName.toUpperCase() == 'IMG') {
        performAction(e.target);
    }
});
这将绑定大量的事件处理程序,这将影响页面的性能。通过事件委派,您可以执行以下操作:

<div id="container">
    <img src="happy.jpg">
    <img src="sad.jpg">
    <img src="laugh.jpg">
    <img src="boring.jpg">
</div>
$('#container img').click(function() {
    performAction(this);
});
$('#container').click(function(e) {
    if($(e.target)[0].nodeName.toUpperCase() == 'IMG') {
        performAction(e.target);
    }
});
这将仅将1个事件绑定到实际容器,然后您可以通过使用事件的
target
属性确定单击了什么,并相应地进行委托。不过,这仍然是一种痛苦,实际上,通过使用jQuery的函数,您可以在不执行所有这些操作的情况下获得显著的性能改进:

$('#container img').live('click', function() {
     performAction(this);
});

希望这能有所帮助。

我需要更多详细信息来提供实际代码,但您可能希望了解:

事件委派是指在父对象上使用单个事件侦听器来侦听在其子对象(或更深层的子对象)上发生的事件。事件委派允许开发人员在应用程序中稀疏地使用事件监听器,同时当事件发生在高度特定的目标上时仍对其作出反应。事实证明,这是在事件丰富的web项目中保持高性能的关键策略,在这些项目中,创建数百个事件侦听器可能会快速降低性能

一个简单的例子:

假设您有一个包含图像的DIV,如下所示:

<div id="container">
    <img src="happy.jpg">
    <img src="sad.jpg">
    <img src="laugh.jpg">
    <img src="boring.jpg">
</div>
$('#container img').click(function() {
    performAction(this);
});
$('#container').click(function(e) {
    if($(e.target)[0].nodeName.toUpperCase() == 'IMG') {
        performAction(e.target);
    }
});
这将绑定大量的事件处理程序,这将影响页面的性能。通过事件委派,您可以执行以下操作:

<div id="container">
    <img src="happy.jpg">
    <img src="sad.jpg">
    <img src="laugh.jpg">
    <img src="boring.jpg">
</div>
$('#container img').click(function() {
    performAction(this);
});
$('#container').click(function(e) {
    if($(e.target)[0].nodeName.toUpperCase() == 'IMG') {
        performAction(e.target);
    }
});
这将仅将1个事件绑定到实际容器,然后您可以通过使用事件的
target
属性确定单击了什么,并相应地进行委托。不过,这仍然是一种痛苦,实际上,通过使用jQuery的函数,您可以在不执行所有这些操作的情况下获得显著的性能改进:

$('#container img').live('click', function() {
     performAction(this);
});
希望这有帮助。

如果您说的“原生
liveQuery
”是指,
live()
liveQuery()快得多。后者使用
setInterval
定期查询整个文档树中的新元素,而前者使用

事件委派将赢得下传。简而言之,
live()
将在
文档中注册每个事件类型的一个处理程序(例如,
单击
),无论您使用多少选择器调用
live()

至于你的另一个问题,听起来你好像在绑定每张幻灯片的元素,想知道再次解除绑定和绑定是否有效?我想说的是WRT记忆,是的。WRT CPU周期,否

要明确的是,使用
liveQuery()
方法,CPU将永远不会睡眠。

如果您说的“原生
liveQuery
”是指,
live()
liveQuery()快得多。后者使用
setInterval
定期查询整个文档树中的新元素,而前者使用

事件委派将赢得下传。简而言之,
live()
将在
文档中注册每个事件类型的一个处理程序(例如,
单击
),无论您使用多少选择器调用
live()

至于你的另一个问题,听起来你好像在绑定每张幻灯片的元素,想知道再次解除绑定和绑定是否有效?我想说的是WRT记忆,是的。WRT CPU周期,否


需要说明的是,使用
liveQuery()
方法,CPU将永远不会睡眠。

这是值得的。我们刚刚对这件事做了一些测试。我们创建了一个包含多个div的div页面,每个div都需要一个onclick处理程序显示一个显示其id的警报对话框

在一个案例中,我们使用了DOM级别0事件注册,并直接在html for each:onclick=“\u do\u click(this);”中为每个事件定义了事件处理程序。在另一种情况下,我们使用DOM级别2事件传播,并在包含的div上定义了一个事件处理程序

我们发现,在100000个div中,FireFox上的加载时间差别可以忽略不计。这花了很长时间。在Safari中,我们发现DOM级别0比DOM级别2花了两倍的时间,但仍然比FireFox快四倍


所以,是的,它确实带来了更好的性能,但似乎你真的必须尝试创造一个明显的惩罚。

为了它的价值。我们刚刚对这件事做了一些测试。我们创建了一个包含多个div的div页面,每个div都需要一个onclick处理程序显示一个显示其id的警报对话框

在一个案例中,我们使用了DOM级别0事件注册,并直接在html for each:onclick=“\u do\u click(this);”中为每个事件定义了事件处理程序。在另一种情况下,我们使用DOM