Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择器:Id与上下文_Javascript_Jquery_Performance_Jquery Selectors_Css Selectors - Fatal编程技术网

Javascript 选择器:Id与上下文

Javascript 选择器:Id与上下文,javascript,jquery,performance,jquery-selectors,css-selectors,Javascript,Jquery,Performance,Jquery Selectors,Css Selectors,我使用jQuery 我读了很多关于选择器性能和优化AJAX应用程序的文章。我希望提高我的选择器性能。我知道所有jquery性能提示。我还没有找到一个确切的答案。我几乎使用了当前所有的jquery性能提示,但我的应用程序似乎仍然有点滞后 所以,为了优化,我从选择器开始 我的问题是:从上下文到目标id的降序是否比只针对id更快?我看不出有多大区别 例如: 是 快于 $('#childId'); 提前感谢。根据,使用更少、更直接的选择器更快#id比#id#child好,至少在css中是这样。当您通

我使用jQuery

我读了很多关于选择器性能和优化AJAX应用程序的文章。我希望提高我的选择器性能。我知道所有jquery性能提示。我还没有找到一个确切的答案。我几乎使用了当前所有的jquery性能提示,但我的应用程序似乎仍然有点滞后

所以,为了优化,我从选择器开始

我的问题是:从上下文到目标id的降序是否比只针对id更快?我看不出有多大区别

例如:

快于

$('#childId');


提前感谢。

根据,使用更少、更直接的选择器更快
#id
#id#child
好,至少在css中是这样。

当您通过“id”进行选择时,上下文并不重要,因为引擎无论如何都要调用
getElementById()
。上下文语义当然很重要,但检查应该非常快。(我想从这个角度来看,上下文应该稍微慢一点,但如果它对页面有实际意义,你就不能停止这样做。)

不确定你上面描述的语法是否有用,但在第5条规则中确实指出使用子查询更快(这是有意义的)。。。不过,他们使用$higherElm.find()语法进行了演示


在您的示例中——因为它直接映射到getElementById,这是一个本机函数调用——我认为您不会看到太多改进。但是,以元素集为目标的选择器(因此循环)可能会看到一些或主要的好处。

如中所示,
$('#id')
只做
document.getElementById
,而
$('#id',context)
$(context)。查找('#id')
。所以第一个更快。

选择ID是绝对最快的选择


添加任何其他内容只会减慢速度。

您是否尝试过评测您的应用程序?除非你看到实际的瓶颈在哪里,否则你可能会进行优化,几乎没有什么好处。是的,大多数的罪魁祸首是jquery方法,比如draggable和resizeable、CSS、CLASS,以及其他一些没有直接调用的jquery方法。这篇文章主要是为了找出应该使用哪种id选择器方法(我知道这不会有多大区别)。。。这没什么错。另外,并不是说你不知道这一点,试着从整体上考虑性能结果。一个特定的API可能会很慢,但要真正解决性能问题,可能需要考虑调用该API的原因,并找到避免频繁调用该API的机会。性能作品与其说是一门科学,不如说是一种艺术形式,而性能工具正是如此,工具,就像油漆的颜色:)它们在寻找不太具体的元素时速度更快。按id查找元素时,
getElementById
的速度非常快,而上下文正好挡住了它的去路。是的。此外,由于
$('#id',context)
总是以调用
$(context.find('#id')
(甚至可能是
context.find('#id')
如果
context
已经是jQuery对象-不确定/记不起来,但它不会更改以下内容…)您可以使用
$.find()
版本,速度略快。
$('#childId');