文字列を介してオブジェクトを作成するのが同じオブジェクトよりも遅い理由を誰かが説明して、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
これは、 のような要素名のみを渡すと、 document.createElement()$("<div>")
の呼び出しにマップされるためです。
一方、要素とその属性 ( など) を渡すと、document.createDocumentFragment()$("<div class='foo'>")
の呼び出しにマップされます。これは、その後にプロパティに書き込むよりも遅くなります。createElement()
className
とにかく、HTML文字列を解析してから(または内部で同等のものを)実行する必要があるため、時間が$('<div class=“foo” />')
かかります。addClass()
3番目のテストケースを追加してみました
viaObject = $("<div>", { class: "foo-"+counterN });
biz.append(viaObject);
counterN++;
$("<div>").addClass("foo-")
FrédéricHamidi(document.createElement()とdocument.createDocumentFragment())が指摘した理由と同じくらい速いはずだと思っていましたが、それでも遅くなりました。
おそらく、addClass()は、オブジェクトのプロパティにアクセスするよりも高速です。
いずれにせよ、これはあなたがこのような要素を作成する必要があることを証明しています
$("<div>", { class: "foo-"+counterN });
そしてこれが好きではない:
$('<div class="foo-' + counterS + '" />');