从性能的角度来看:这取决于.
在您的简短示例中,附加文本更快,因为您实际上直到最后都没有创建任何 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 创建进行比较,这几乎不是公平的比较,也不是很有用:)
从上面可以看出,缓存的fragment越复杂,缓存的影响越大。在第一个测试中,这是您的示例,没有稍微清理一下条件,DOM 丢失,因为有很多小操作正在进行,在此测试中(在我的机器上,但您的比率应该大致相同):HTML 联系人: 25毫秒,DOM 操作:149 毫秒。
但是,如果您可以缓存复杂的片段,您就不会重复创建这些 DOM 元素,只需克隆它们即可。在第二个测试中,DOM 胜出,因为虽然 HTML 方法创建了5000 次该 DOM 元素集合,但第二个缓存方法只创建了一次,并克隆了 5000 次。在这个测试中:HTML Concat: 282ms , DOM Manipulation: 157ms。
我意识到这并不是直接回答您的问题,但根据评论,似乎对性能有些好奇,所以只需提供一些您可以看到/测试/玩的东西。