6

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

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

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

4

3 回答 3

4

这是因为只传递一个元素名称,比如$("<div>"),映射到对document.createElement()的调用。

另一方面,传递一个元素及其属性,如$("<div class='foo'>"),映射到对document.createDocumentFragment()的调用,这比createElement()随后写入className属性要慢。

于 2011-11-23T15:54:38.747 回答
3

我会说这$('<div class=“foo” />')需要时间,因为它必须解析 HTML 字符串,然后addClass()无论如何都要执行(或内部等效项)。

于 2011-11-23T15:47:34.663 回答
0

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

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

我认为应该和$("<div>").addClass("foo-")Frédéric Hamidi 指出的原因一样快(document.createElement() vs document.createDocumentFragment()),但它仍然较慢。

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

无论如何,这证明你应该像这样创建你的元素

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

而不是这样:

 $('<div class="foo-' + counterS + '" />');
于 2011-11-23T16:01:29.143 回答