jQuery - 为什么通过字符串创建类对象 ($('>')) 比创建相同对象并执行 addClass() 方法慢?
谁能解释一下为什么通过字符串创建对象比在 jQuery 中创建同一对象并执行 addClass() 方法慢?
我以为 addClass() 方法会慢一些,但事实并非如此。我想知道为什么?
看看这个 jsPerf - http://jsperf.com/jquery-append-with-class -and-with-method-addclass
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是因为仅传递元素名称(例如
$("
")
)会映射到对 document.createElement()。另一方面,传递元素及其属性,例如
$("
")
,映射到对 document.createDocumentFragment(),它比createElement()
慢,然后写入className
属性。That's because only passing an element name, like
$("<div>")
, maps to a call to document.createElement().On the other hand, passing an element and its attributes, like
$("<div class='foo'>")
, maps to a call to document.createDocumentFragment(), which is slower thancreateElement()
followed by a write to theclassName
property.我想说
$('
')
需要时间,因为它必须解析 HTML 字符串,然后执行addClass()
(或内部等效项)无论如何。I would say that
$('<div class=“foo” />')
takes time because it has to parse the HTML string, then perform theaddClass()
(or internal equivalent) anyway.我尝试添加第三个测试用例
,我认为它应该与
$("
").addClass("foo-")
一样快,原因由 Frédéric Hamidi 指出( document.createElement() 与 document.createDocumentFragment()) 但它仍然较慢。addClass() 可能比访问对象的属性更快。
无论如何,这证明您应该像这样
而不是这样创建元素:
I tried adding a third test case with
that i thought should have been as fast as
$("<div>").addClass("foo-")
for the reason pointed out by Frédéric Hamidi (document.createElement() vs document.createDocumentFragment()) but it still slower.Probably addClass() is faster than accessing properties of an object.
In any case this proves that you should create your element like this
and not like this: