我有一个 Handlebars.js 模板,它获取一堆数据并将其呈现到表格中。它第一次运行时,它绑定得相当快并且没有任何问题。但是,任何后续时间都需要很长时间(即使是相同的数据!),有时还会导致浏览器崩溃。有什么问题?
在其最通用的形式中,模板如下所示:
{{#each this}}
<tr>
<td>{{data}}</td>
...
<td>{{moredata}}</td>
</tr>
{{/each}}
JS 中的绑定逻辑看起来像这样(再次非常通用):
var table = $('#mytable').empty();
$.ajax(url, data).done(function(response) {
var template = Handlebars.compile(mytemplate);
table.hide();
table.html(template(response.data)); //takes a long time after the 1st time
table.show();
});
正如我所说,第一次运行时,绑定非常快。第二次和以后的时间,它在绑定步骤中保持了很长时间。
更新
因此,在尝试解决此问题时,我从{{each}}
模板中取出并将每一行附加for
到 JS 中的循环中,同时记录索引。第一次运行,一切都绑定得非常快,索引记录模糊。第二次和随后的运行,每一行都需要相当长的时间来绑定,我可以在绑定行时单独观察每个索引......