パフォーマンスの観点から:依存します。
あなたの短い例では、実際には最後までDOM要素を作成していないため、テキストを追加する方が高速です。ただし、これを頻繁に行っていた場合は、文字列連結の追加時間とキャッシュされたドキュメント フラグメントのパフォーマンスが加算されます。
$(html)
jQuery を実行すると、ドキュメントのフラグメントとしてキャッシュされます(文字列が 512 バイト以下の場合)。ただし、単にキャッシュしている場合はあまり効果がありません$("<div />")
...ただし、何千回も実行している場合は、測定可能な文字列が長くなるにつれて文字列連結のコストが高くなるため、キャッシュされたドキュメント フラグメントのコストはかなり安定しています。
更新:これが何を意味するかを確認するための簡単な例です。firebug を使用して、ここでコンソール時間を取得します。
これを自分で実行できます: http://jsfiddle.net/Ps5ja/
console.time('concat');
var html = "";
for(var i = 0; i < 500; i++) {
html += '<div><span>Some More Stuff</span></div>';
html += '<div>Some Conditional Content</div>';
}
var elem = $(html);
console.timeEnd('concat'); //25ms
console.time('DOM');
var parent = $("<div />")
for(var j = 0; j < 500; j++) {
parent.append($('<div/>').append($('<span/>', {text :'Some More Stuff'})));
parent.append($('<div/>',{ text: 'Some conditionalContent' }));
}
console.timeEnd('DOM'); //149ms
console.time('concat caching');
var html = "";
for(var i = 0; i < 5000; i++)
html += '<div><span>Some More Stuff</span></div><div>Some Conditional Content</div>';
var elem = $(html);
console.timeEnd('concat caching'); //282ms
console.time('DOM caching');
var parent = $("<div />")
for(var j = 0; j < 5000; j++)
parent.append('<div><span>Some More Stuff</span></div><div>Some Conditional Content</div>');
console.timeEnd('DOM caching'); //157ms
注:var elem = $(html);
文字列テストでは、同じDOM要素を作成することになります。そうしないと、文字列連結を実際のDOM作成と比較しているため、公正な比較はほとんどなく、どちらもあまり役に立ちません:)
上記からわかるように、キャッシュされたフラグメントはより複雑であり、より多くのキャッシュが影響を与えます。最初のテストは、条件が少しクリーンアップされていない例ですが、このテストでは小さな操作がたくさん行われているため、DOM が失われます (私のマシンでは、比率はほぼ同じである必要があります): HTML 連絡先: 25 ミリ秒、DOM 操作: 149 ミリ秒。
ただし、複雑なフラグメントをキャッシュできる場合は、それらの DOM 要素を繰り返し作成するのではなく、複製するだけでよいという利点があります。2 番目のテストでは DOM が勝ちます。HTML メソッドがその DOM 要素コレクションを5000 回作成するのに対し、2 番目のキャッシュされたメソッドはそれを 1 回しか作成せず、 5000 回複製するためです。このテストでは: HTML Concat: 282ms、DOM Manipulation: 157ms .
これはあなたの質問への直接の回答ではないことは承知していますが、コメントに基づいて、パフォーマンスについて好奇心が強いようです。そのため、表示/テスト/再生できるものを提供するだけです.