谁能解释我为什么通过字符串创建对象比同一个对象慢并在 jQuery 中执行 addClass() 方法?
我认为 addClass() 方法会更慢,但事实并非如此。我想知道为什么?
看看这个 jsPerf - http://jsperf.com/jquery-append-with-class-and-with-method-addclass
谁能解释我为什么通过字符串创建对象比同一个对象慢并在 jQuery 中执行 addClass() 方法?
我认为 addClass() 方法会更慢,但事实并非如此。我想知道为什么?
看看这个 jsPerf - http://jsperf.com/jquery-append-with-class-and-with-method-addclass
这是因为只传递一个元素名称,比如$("<div>")
,映射到对document.createElement()的调用。
另一方面,传递一个元素及其属性,如$("<div class='foo'>")
,映射到对document.createDocumentFragment()的调用,这比createElement()
随后写入className
属性要慢。
我会说这$('<div class=“foo” />')
需要时间,因为它必须解析 HTML 字符串,然后addClass()
无论如何都要执行(或内部等效项)。
我尝试添加第三个测试用例
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 + '" />');