jquery - 提高 jQuery 模板性能

标签 jquery performance jquery-templates

更新

显然,jQuery 模板可以被编译,并且它有助于显示带有 if 语句 的模板的性能 here .

但是如图here ,预编译的 jQuery 模板对我的情况没有多大作用,因为我的模板不包含逻辑 block 。

对于那些建议使用其他模板引擎的人,理想情况下我只想使用 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>

谢谢

最佳答案

陈志,

这个问题有点晚了。我发现先编译模板,然后通过字符串 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

希望这有帮助,祝你好运......

关于jquery - 提高 jQuery 模板性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608371/

相关文章:

javascript - 使用jquery更快还是不使用jquery?

mysql - 如何在GTFS网络上优化我的寻路算法

javascript - jquery 模板内的 &lt;script&gt; 标签

jquery - 在单行中滑动 div

javascript - 排序映射实现

c++ - 访问堆栈变量比取消引用指针慢?

javascript - Jquery 模板不适用于 'each'

jquery - 使用 jquery 模板插件构建表

javascript - 在半个div上插入元素

string - Go切换字符串效率