更新
显然,可以编译jQuery模板,它有助于显示 if语句 here的模板的性能。
但是如图所示here,预编译的jQuery模板对我的情况没有太大作用,因为我的模板不包含逻辑块。
对于那些建议使用另一个模板引擎的人,理想情况下我只想使用jQuery模板,因为团队中的每个人都只知道jQuery。还有this测试用例比较了一些模板引擎。
您好,
就在今天,我被告知使用jQuery模板存在性能问题。
为了比较,我使用了jQuery模板和好的旧字符串追加方法来向表中添加行。结果可见here。与字符串追加方法相比,使用jQuery模板大约慢了65%!
我想知道如何改善jQuery模板脚本的性能。
可以在提供的链接中查看完整脚本。但基本思路如下:
模板:
<script type="x-jquery-tmpl" id="tmplRow">
<tr>
<td><input type="checkbox" value="${id}" /></td>
<td>${firstName} ${lastName}</td>
<td class="edit">
<a>Edit</a>
<input style="display:none;" type="hidden" value="Blah" />
<input class="cancel" type="button" value="cancel" />
</td>
<td class="select">
<a>Select</a>
<select style="display:none;">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class="cancel" type="button" value="cancel" />
</td>
<td>More string</td>
<td>More string</td>
<td>More string</td>
<td>More string</td>
<td>More string</td>
<td>More string</td>
</tr>
</script>
数据:
<script type="text/javascript">
var data = [];
for (var i = 0; i < 100; i++) {
var row = {
id: i,
firstName: 'john',
lastName: 'doe'
};
data.push(row);
}
</script>
HTML:
<table id="table"></table>
执行:
<script type="text/javascript">
$('#tmplRow').tmpl(data).appendTo('#table');
</script>
谢谢,
志
答案 0 :(得分:5)
Chi Chan,
在这条路上有点晚了。我发现首先编译模板然后通过字符串Id(在下面的情况下,命名变量templateAlias
)引用它们实际上比通过对象路由快10倍。以下是您实现该目标的方法(基于您的代码示例):
var templateAlias = 'tmplRow';
// compile the template
$.template(templateAlias, $("#tmplRow"));
<script type="text/javascript">
$.tmpl(templateAlias, data).appendTo('#table');
</script>
这将显着加快程序,因为模板将被编译,并且每次运行.appendTo()
函数时都不会使用整个对象模型。使用$('#tmplRow').tmpl(data).appendTo('#table');
表示$('#tmplRow')
查询DOM,而$.tmpl(templateAlias, data).appendTo('#table');
仅基于对模板的引用添加到DOM。关于这个问题有很多阅读。
这是一个可能有用的链接:
http://boedesign.com/misc/presentation-jquery-tmpl/#13
希望这会有所帮助,祝你好运......
答案 1 :(得分:4)
这似乎是目前最快的引擎:http://documentcloud.github.com/underscore/
您可以在此处找到一个基准测试套件,用于比较当前可用的所有不同模板框架:https://github.com/aefxx/jQote2 [下载并运行jqote.benchmark.htm]。
我相信jQuery模板还处于起步阶段,性能将在后续迭代中得到改善。
答案 2 :(得分:1)
这很大程度上取决于执行渲染的浏览器。 IE6可能相当慢(虽然传输1,000行大量HTML标记并将其注入文档也不会很快)。
这是Chrome 9中的1,000行的jsperf benchmark that generates 1,000 rows of 10 columns and renders it. I'm averaging 200-250ms to render。
更重要的问题应该是:为什么世界上你一次显示1000行?总有比这更好的用户体验替代品。
答案 3 :(得分:0)
您的模板非常简单,您可能需要take a look at handlebars.js这是一种模板语言,可以选择预编译模板。
它由rails和jquery核心成员Yehuda Katz制作。
答案 4 :(得分:0)
没有人提到胡子。 在2011年底,胡子在流行的模板框架中表现最佳。