>')) 比创建相同对象并执行 addClass() 方法慢?" />

jQuery - 为什么通过字符串创建类对象 ($('
>')) 比创建相同对象并执行 addClass() 方法慢?

发布于 2024-12-17 13:41:06 字数 298 浏览 0 评论 0 原文

谁能解释一下为什么通过字符串创建对象比在 jQuery 中创建同一对象并执行 addClass() 方法慢?

我以为 addClass() 方法会慢一些,但事实并非如此。我想知道为什么?

看看这个 jsPerf - http://jsperf.com/jquery-append-with-class -and-with-method-addclass

Can anyone may explain me why creating object via string is slower than same object and execute addClass() method in jQuery?

I thought that addClass() method will be slower, but it is not. I'm wondering why?

Look at this jsPerf - http://jsperf.com/jquery-append-with-class-and-with-method-addclass

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无需解释 2024-12-24 13:41:06

这是因为仅传递元素名称(例如 $("

"))会映射到对 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 than createElement() followed by a write to the className property.

你穿错了嫁妆 2024-12-24 13:41:06

我想说 $('

') 需要时间,因为它必须解析 HTML 字符串,然后执行 addClass() (或内部等效项)无论如何。

I would say that $('<div class=“foo” />') takes time because it has to parse the HTML string, then perform the addClass() (or internal equivalent) anyway.

时光暖心i 2024-12-24 13:41:06

我尝试添加第三个测试用例

viaObject = $("<div>", { class: "foo-"+counterN });
biz.append(viaObject);
counterN++;

,我认为它应该与 $("

").addClass("foo-") 一样快,原因由 Frédéric Hamidi 指出( document.createElement() 与 document.createDocumentFragment()) 但它仍然较慢。

addClass() 可能比访问对象的属性更快。

无论如何,这证明您应该像这样

 $("<div>", { class: "foo-"+counterN }); 

而不是这样创建元素:

 $('<div class="foo-' + counterS + '" />');

I tried adding a third test case with

viaObject = $("<div>", { class: "foo-"+counterN });
biz.append(viaObject);
counterN++;

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

 $("<div>", { class: "foo-"+counterN }); 

and not like this:

 $('<div class="foo-' + counterS + '" />');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文