jQuery选择器的性能
这是选择器:jQuery选择器的性能,jquery,performance,selector,Jquery,Performance,Selector,这是选择器: $("div#myId") $("#myId") 比此选择器更快: $("div#myId") $("#myId") ?? 两者都很好,但我想提高性能。每一个a,$(“#myId”)比$(“div#myId”)快4倍 使用id值时,添加到选择器的任何其他内容都不会提高性能。浏览器已经有了所有id值的索引,因为文档中的所有id都应该是唯一的。向选择器添加其他内容只会使它必须测试更多的内容。例如,对于#myId,可以使用对document.getElementById(“myI
$("div#myId")
$("#myId")
比此选择器更快:
$("div#myId")
$("#myId")
??
两者都很好,但我想提高性能。每一个a,$(“#myId”)
比$(“div#myId”)
快4倍
使用id值时,添加到选择器的任何其他内容都不会提高性能。浏览器已经有了所有id值的索引,因为文档中的所有id都应该是唯一的。向选择器添加其他内容只会使它必须测试更多的内容。例如,对于#myId
,可以使用对document.getElementById(“myId”)
的短路,但是在div#myId
中,jQuery或它调用的函数必须首先将选择器分解为若干部分,找到具有正确ID的对象,然后检查它是否也是div
如果您真的想绝对肯定地知道任何两个场景之间的性能差异,那么您必须编写一个性能测试(在类似的工具中),并在所有相关的浏览器中进行测试
通常,您应该遵循使用最简单的代码并以适当的性能完成任务的原则。这可能是$(“#myId”)
,除非您真的试图优化纯性能,在这种情况下,您将使用document.getElementById(“myId”)
而且,对于grins来说,jQuery根本就不快(它创建一个对象,运行一个构造函数,分析选择器,计算选择器,查看其他可以传递的选项,等等),因此,如果您真的关心优化性能,那么您首先就不会使用jQuery。也就是说,jQuery大大加快了编写代码的速度,因此在许多情况下都是值得的
有关性能比较,请参见jsperf:
在Chrome中,这三者之间有很大的区别:
$("div#myId") - 446,589 ops/sec
$("#myId") - 1,705,994 ops/sec
document.getElementById("myId") - 32,278,617 ops/sec
因此,$(“#myId”)
比$(“div#myId”)
和文档快约4倍。getElementById(“myId”)
比$(“#myId”)
快19倍。这比我预期的差异更大
这是一个图形表示法(条形图越长,速度越快):
当你测量而不是猜测时,你总会学到一些东西
深入研究jQuery选择器处理代码,您会看到:
“”
/^(?:\s*()[^>]*|#([\w-]*)$/
正则表达式“#xxxx”
,则调用document.getElementById()
.find()
以查找匹配的选择器。运行.find()
将选择器从要评估的Sizzle引擎中传递出去(从头开始)querySelectorAll()
querySelectorAll()的嘶嘶声选择器求值代码的深处
将加快速度。每一次,$(“#myId”)
比$(“div#myId”)快4倍
当使用id值时,您添加到选择器的任何其他内容都不会提高性能。浏览器已经有了所有id值的索引,因为文档中的所有id都应该是唯一的。向选择器添加其他内容只会使它必须测试更多的内容。例如,使用#myId
,对可以使用document.getElementById(“myId”)
,但在div#myId
中,jQuery或它调用的函数必须首先将选择器分解为多个部分,找到具有正确ID的对象,然后检查它是否也是div
如果您真的想绝对肯定地知道任何两个场景之间的性能差异,那么您必须编写一个性能测试(在类似的工具中),并在所有相关的浏览器中进行测试
通常,您应该遵循使用最简单的代码并以适当的性能完成任务的原则。这可能是$(“#myId”)
,除非您真的试图优化纯性能,在这种情况下,您将使用document.getElementById(“myId”)
而且,对于grins来说,jQuery根本就不快(它创建一个对象,运行一个构造函数,分析选择器,计算选择器,查看其他可以传递的选项,等等),因此,如果您真的关心优化性能,那么您首先就不会使用jQuery。也就是说,jQuery大大加快了编写代码的速度,因此在许多情况下都是值得的
有关性能比较,请参见jsperf:
在Chrome中,这三者之间有很大的区别:
$("div#myId") - 446,589 ops/sec
$("#myId") - 1,705,994 ops/sec
document.getElementById("myId") - 32,278,617 ops/sec
因此,$(“#myId”)
比$(“div#myId”)
和文档快约4倍。getElementById(“myId”)
比$(“#myId”)
快19倍。这比我预期的差异更大
这是一个图形表示法(条形图越长,速度越快):
当你测量而不是猜测时,你总会学到一些东西
深入研究jQuery选择器处理代码,