在这个问题上,我发现一些不同和相互矛盾的答复。
我正在根据以JSON数据形式从对应的APIC中获取的结果,开发一个主要与由Kil Query动态生成的html有关的申请。
我的一些同事(个人)告诉我,最好的办法是做这样的事情:
var ul = $("<ul>").addClass("some-ul");
$.each(results, function(index) {
ul.append($("<li>").html(this).attr("id", index));
});
$("body").append($("<div>").attr("id", "div-id").addClass("some-div").append(ul));
etc. The reason I was told it was that "updates the DOM directly instead of parsing html to achieve it".
然而,我看到许多法典,例如:
var toAppend = <div class="some-div" id="div-id"><ul> ;
$.each(results, function(index) {
toAppend += <li id=" + index + "> + this + </li> ;
});
toAppend += </ul></div>
我个人认为什么不是立法者,而是更好吗? 我用几分钟时间来讨论这个问题,并找到。 从根本上说,正是通过使用扼杀——我的“第二”方式——来大幅提高业绩。
该条的主要问题是,它已于2009年公布,讨论过格文版本为1.3。 今天,目前的释放是1.6.4版,其行为可以大不相同。 这也是我已经发现的关于这一主题的大多数文章的问题,我也在某种程度上怀疑这些文章的可信度。
因此,我决定在此提出这个问题,并询问——根据业绩,产生OMM的方法实际上是什么?
IMPORTANT EDIT:
我为测试哪些方法正在更好地考虑业绩而写下了一些基准。
jsFiddle - concatenation edition
http://jsfiddle.net/C4Ymm/1/"rel=“noretinger”>jsFiddle - 阵列加入本
法典:
var text = "lorem ipsum";
var strings = $("#strings");
var objects = $("#objects");
var results = $("#results");
// string concatenation
var start = new Date().getTime();
var toAppend = [ <div class="div-class" id="div-id1"><ul class="ul-class" id="ul-id1"> ];
for (var i = 1; i <= 20000; i++) {
toAppend[i] = <li class="li-class" id="li-id1- + i + "> + text + </li> ;
}
toAppend[i++] = </ul></div> ;
results.append(toAppend.join(""));
strings.html(new Date().getTime() - start);
// jquery objects
var start = new Date().getTime();
var ul = $("<ul>").attr("id", "ul-id2").addClass("ul-class");
for (var i = 0; i < 20000; i++) {
ul.append($("<li>").attr("id", "li-id2-" + i).addClass("li-class"));
}
results.append($("<div>").attr("id", "div-id2").addClass("div-class").append(ul));
objects.html(new Date().getTime() - start);
看来,在座标上操作的速度比使用 j子和方法快(约7次)。 但是,我可能错了,特别是如果在“基准”法中存在任何错误或业绩判断错误。 感到可以自由改变。
注:我使用Arrayjoin
是因为前面提到的条款而不是实际的分类。
EDIT:根据@hradac的建议,我在基准中使用了实际扼杀的分类,实际上改善了时间。