0

我无法找到答案的两个基本问题如下:

1) 绑定点击函数与通过 onclick="doingness()" 触发的性能,如:

$("#id").find('a').on('click',function(){
    $(this).doingness();
});

相对:

<div id="id"><a onlick="doingness()"></a></div>

function doingness(){
    $('#id').do();
}

在我看来,第二个可能表现最好,因为在用户实际单击之前不需要进行绑定,因此脚本不必搜索整个 DOM 来查找 id 并将某些内容绑定到它。那正确吗?

接下来,我听说使用这些(不管它叫什么)非常昂贵:

$('body').on('click', '#id', function(){
    $(this).do();
});

当然,我使用了其中的一些动态加载的内容,以使这些功能保持活动状态。我猜测性能下降主要与需要保存在内存中的整个函数有关,并且可能会一遍又一遍地重新访问以检查它是否应该再次启动。而不是这种代码,我最近意识到我也可以在 html 中添加一个 onclick="doingness()" ,我的问题是这对性能有帮助吗?

4

1 回答 1

1

比较方法 1 和方法 2,内联的“onclick”会更快,因为不需要遍历 DOM 来搜索正确的节点(首先搜索 id,然后在元素内的 a-tag 上搜索ID)。但老实说,我认为额外的性能(这真的不是那么/重要,除非你正在编写高性能游戏等)并没有超过第一种方法提供的代码分离的改进。

在我看来,你的最后一段代码是你应该避免使用的。当需要在一系列元素中处理事件时(例如,在大表中捕获每个 td 上的点击事件),应该(imo)使用这种带有选择器参数的 on-method 形式。在这种情况下,这是一个很大的性能改进,因为您只需要一个事件处理程序,而不是可能成百上千。但是,您正在使用 id-selector 进行操作,因此您仅将它用于一个元素。我理解如果动态插入元素,它将起作用,但是您应该等待绑定事件直到插入元素之后,然后采用常规方式捕获事件。

在这种情况下,onclick 方法也可以工作,我认为它会提高性能,但同样,它不值得,因为你牺牲了代码分离。

于 2013-11-14T09:08:21.863 回答