首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我是否通过将‘an’调用绑定到更具体的东西来节省处理器时间?

我是否通过将‘an’调用绑定到更具体的东西来节省处理器时间?
EN

Stack Overflow用户
提问于 2012-08-27 08:40:11
回答 3查看 48关注 0票数 0

在这里寻找最佳实践。但我最近刚刚升级了一个应用程序,从jQuery 1.4升级到1.8,我正在慢慢地将所有live调用切换到on调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).on('click', 'a.edit', function(){

来自:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$("a.edit").live(function() { 
  1. 将其绑定到更具体的东西而不是文档会更快吗?
  2. 这两个电话有速度上的差别吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-27 08:44:27

现在,将事件委托给文档意味着,当单击文档中的所有元素时,都会触发事件处理程序,然后检查目标是否与a.edit匹配,这是大量的检查。将其缩小到更接近a.edit的元素将意味着激发事件处理程序的元素较少,检查是否与指定目标匹配的元素也较少。

来自jQuery 文档

不再建议使用.live()方法,因为jQuery的后期版本提供了更好的方法,这些方法没有缺点。特别是,在使用.live()时会出现以下问题: jQuery试图在调用.live()方法之前检索选择器指定的元素,这在大型文档上可能很费时。不支持链接方法。例如,$("a").find(".offsite,.external").live( .)是无效的,不能按预期工作。由于所有.live()事件都附加在document元素中,因此在处理它们之前,事件会采取尽可能长、最慢的路径。在事件处理程序中调用event.stopPropagation()在停止附加在文档中较低的事件处理程序方面是无效的;该事件已经传播到文档。.live()方法以令人惊讶的方式与其他事件方法交互,例如,$(document).unbind(" click ")删除通过调用.live()而附加的所有单击处理程序!

它所做的基本上是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).click(function(e) {
    if (e.target == ourElement) {
        //hey, our element was clicked and bubbled all the way to the root, 
        //so let's do something
    }else{
        //we just jumped through some hoops, but this is not the element we 
        //are looking for, so do nothing...and we do this on every click !
    }
});
票数 4
EN

Stack Overflow用户

发布于 2012-08-27 08:50:47

为了对@adeneo的答案做一些扩展,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).on('click','a.edit',function(){...});

将事件处理程序附加到文档。因为document是DOM的根,所以每个事件最终都会冒泡到document,除非在途中的某个时间点停止传播。

在您的示例中,这意味着每一次单击都将触发事件处理程序。然后,处理程序将检查event.target,以查看单击的源是否与所提供的选择器(在本例中为a.edit)匹配。考虑到click是网页上最常见的事件之一,这里将进行大量的处理。

委派事件时的最佳实践是在您使用事件处理程序所针对的元素中选择最接近的共同祖先(显然,该元素也必须在运行时存在,以便jQuery可以附加该处理程序)。这将减少不必要地触发事件处理程序的次数,并确保通过对.on的单个调用捕获所有目标元素。

票数 1
EN

Stack Overflow用户

发布于 2012-08-27 08:55:00

这两个方法之间没有速度差异,因为它们都需要检查单击的元素是否为a.edit --这将花费相同的时间。

但是,调用检查的次数不同--如果将侦听器附加到document,则每次单击都会触发。如果你用另一种方式去做的话,那就更常见了。

然而,关键的区别(无论速度)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).on('click', 'a.edit', function(){

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$('a.edit').on('click', function(){

第一个方法将click侦听器绑定到您以后可能创建的所有现有和未来的元素。第二种方法只将侦听器(仅)绑定到现有元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12146010

复制
相关文章
用于 SELECT 和 WHERE 子句的函数
1 一个 SQL 语句中的 select_expression 或 where_definition 可由任何使用了下面所描述函数的表达式组成。 2 3 包含 NULL 的表达式总是得出一个 NULL 值结果,除非表达式中的操作和函数在文档中有另外的说明。 4 5 注意:在一个函数名和跟随它的括号之间必须不存在空格。这有助于 MySQL 语法分析程序区分函数调用和对恰巧与函数同名表或列的引用。然而,参数左右两边的空格却是允许的。 6 7 你可以强制 My
用户1112962
2018/07/03
4.8K0
SQLException: 无效的列类型: 1111
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #1 with JdbcType OTHER . Try setting a different JdbcType for this para
程裕强
2022/05/06
1.6K0
mybatis无效列类型_未明确定义的列
select * from (这里能正确执行) tmp_tb where ROWNUM<=10) where row_id>=1
全栈程序员站长
2022/11/09
1.3K0
R语言列筛选的方法--select
我们知道,R语言学习,80%的时间都是在清洗数据,而选择合适的数据进行分析和处理也至关重要,如何选择合适的列进行分析,你知道几种方法?
邓飞
2022/02/09
7.8K0
R语言列筛选的方法--select
select count(*)、count(1)、count(主键列)和count(包含空值的列)有何区别?
最直接的方法,我想就是通过10053事件,来看下不同SQL对应的执行计划和资源消耗等情况,进而看看是否有些信息可以为我们所用。
bisal
2019/01/29
3.4K0
Hive中排除SELECT查询列
在 Hive 表中可能存在很多列,也有可能就存在几列。如果我们想要表中所有列,毫无疑问我们可以使用 SELECT *。但在某些情况下,我们可能拥有 100 多列,并且我们只不需要其中几列。在这种情况下,之前都是手动的添加 SELECT 查询中的所有列名。由于列数很多,比较啰嗦。因此,我们希望能在 Hive 中从 SELECT 查询中排除某些列。
smartsi
2019/11/27
5.6K0
select for update和select for update wait和select for update nowait的区别
CREATE TABLE "TEST6" ( "ID" VARCHAR2(30), "NAME" VARCHAR2(30), "AGE" NUMBER(2,0), "SEX" VARCHAR2(2), "ENAME" VARCHAR2(30), "ADDTIME" DATE ) insert into TEST6 (id, name, age, sex, ename, addtime) values ('1', '张三', 18, null, 'zha
郑小超.
2018/01/26
2.4K0
select * 和 select 所有字段的区别
之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解。
良月柒
2019/05/06
2.2K0
select * 和 select 所有字段的区别
之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解。
良月柒
2019/04/20
3K0
select * 和 select 所有字段的区别
select into from 和 insert into select 的用法和区别
select into from 和 insert into select都是用来复制表,两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建。insert into select from 要求目标表存在 下面分别介绍两者语法 一、INSERT INTO SELECT语句 1、语句形式为:
全栈程序员站长
2022/09/14
5.1K0
select into 和 insert int select
远程连接 MySQL mysql -h <ip> -P 3306 -u root -p 然后输入密码即可连接 mysql -u <user> -p -h <ip> 然后输入密码即可连接 SELECT INTO SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个表中。 MySQL 是不支持 select ... into ,但是可以使用 insert into ... select 当然也可以使用 create table <new table> select * from <old
zucchiniy
2019/10/30
3.3K0
SELECT * 和 SELECT 全部字段
【玩转 GPU】AI绘画、AI文本、AI翻译、GPU点亮AI想象空间-腾讯云开发者社区-腾讯云 (tencent.com)
疯狂的KK
2023/07/03
2.9K0
SELECT * 和 SELECT 全部字段
SQL中搜索中文无效或Select中文变乱码
当我们数据中含有中文,或我们想要Select出中文,当我去查询的时候默认情况下是无法搜索、无法显示的。 这是因为默认是不支持中文,只有NVARCHAR才支持中文 例子:
繁华是客
2023/03/03
1.1K0
SAP ABAP 技能:SELECT、SELECT SINGLE 和 SELECT DISTINCT
最近开始接触一些BW历程的内容,就看到有有一部分SELECT关键词不同,但是功能类似,就想着整理一下。
Adil_zhang
2023/05/10
4.6K0
[1177]Hive 窗口函数之lead() over(partition by ) 和 lag() over(partition by )
lag() over() 与 lead() over() 函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前 N 行的数据 (lag) 和后 N 行的数据 (lead) 作为独立的列, 从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且 LAG 和 LEAD 有更高的效率。
周小董
2023/10/10
3K0
GROUP BY 后 SELECT 列的限制:which is not functionally dependent on columns in GROUP BY clause
标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。我们来看个例子
chenchenchen
2021/09/06
3.2K0
checkbox 和 radio 和 select 的使用
这样凡是设置name属性为Country的将变成单选,name为city的是多选。那么如何获得被选中的元素呢?
Mshu
2018/10/31
1.6K0
操作MyBatis引发Error setting null for parameter #X with JdbcType OTHER .无效的列类型
当我们用MyBatis操作数据库的时候传入null值,而且没有加入jdbcType类型的时候就会引发上述这种错误类型,
Arebirth
2019/09/24
5.5K0
epoll和selectepoll和select
epoll和select 假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。 select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。 而epoll版宿管大妈会先记下每位同学的房间号, 你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。 如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。 同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性
JavaEdge
2018/05/16
1K0
select和epoll的前世今生
首先,select是有缺陷的,就是当事件发生(调用select)的时候,都需要在用户态和内核态之间拷贝fd数组,要知道用户态和内核态之间进行内存的拷贝是非常昂贵的,如果有上万级别的并发网络需要处理的时候,服务器根本处理不来。
混说Linux
2022/07/14
3250

相似问题

重写子select作为用“over(分区.)”生成的列的条件

40

无效语法和无效列

10

为SELECT分析和绑定变量。其中列IN ( ..。)查询

10

基于select的取消枢轴列

10

解释OVER子句

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文