提高 jQuery 模板性能

2024-03-03

Update

显然,jQuery 模板可以被编译,并且它有助于提高模板的性能if 语句 shown here http://jsperf.com/complex-template-vs-concat/4.

但如图所示here http://jsperf.com/jquery-template-table-performance/5,预编译的 jQuery 模板对我的情况没有多大作用,因为我的模板不包含逻辑块。

对于那些建议使用其他模板引擎的人,理想情况下我只想使用 jQuery 模板,因为团队中的每个人都知道 jQuery。还有this http://jsperf.com/dom-vs-innerhtml-based-templating/42比较几个模板引擎的测试用例。


Hi,

就在今天,我被告知使用 jQuery 模板存在性能问题。

为了进行比较,我使用了 jQuery 模板和良好的旧字符串附加方法来将行添加到表中。结果可见here http://jsperf.com/jquery-template-table-performance。与字符串附加方法相比,使用 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>

Data:

<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>

Thanks,

Chi


陈志,

这条路有点晚了。我发现首先编译模板,然后通过字符串 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 http://boedesign.com/misc/presentation-jquery-tmpl/#13

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提高 jQuery 模板性能 的相关文章

  • 显示覆盖以覆盖整个页面

    我有一个正在加载的网络应用程序iframe 我需要显示一个覆盖 div 来覆盖整个页面 问题是叠加层当前仅显示在iframe区域而不覆盖整个页面 我们的应用程序 子应用程序 是加载的一组应用程序的一部分iframe 你可以做这样的事情 di
  • wp_unregister 和 wp_enqueue

    有人建议我使用 wp unregister 和 wp enqueue 将 wordpress jquery 库替换为 google 托管的库 因为 wordpress 有一些问题 然而 当我尝试将这些插入我的 WordPress 网站时 它
  • jquery:$().animate() 不是函数

    我已经做了很多搜索 但无法找到我的问题的答案 所以这里是 我正在尝试创建一个滑出切换菜单本教程 http alijafarian com jquery horizontal slideout menu 我收到一个错误slideoutMenu
  • 如何在Jquery-Select2中设置多值选择中的选定值?

    我正在绑定我的下拉菜单Jquery Select2 它工作正常 但现在我需要绑定我的多值selectBox通过使用Jquery Select2 我的下拉菜单 div class divright div
  • Jquery函数返回值

    我创建了一个函数来迭代 UL LI 这工作得很好 我的问题是将值返回给另一个变量 这可能吗 最好的方法是什么 谢谢 function getMachine color qty getMachine li each function var
  • Bootstrap 4 具有 d-flex 类的列表项不响应 .hide()?

    当我添加课程时d flex我的引导程序 4 ul 列表项不响应 hide 不再 尽管style display none 被添加到 DOM 中 The d flex用于Bootstrap 4 列表徽章 https getbootstrap
  • 在 ajax 完成之前阻止提交

    我正在使用 jQuery 并且我希望在所有 ajax 调用完成之前表单提交不会起作用 我想到的一种方法是存储一个布尔值 该值指示是否有 ajax 请求正在进行 在每一个结束时它都会被设置为 false 我不确定这是否是最好的方法 所以我将不
  • 在 Web 浏览器中查找触发 then 事件的 jQuery 代码

    我加入了一个团队来从事一个项目 现在他们使用 jQuery 并且很多 javascript 文件都是外部文件而不是嵌入的 当我点击一个按钮时 它看起来就像 a class button cancel Cancel a 它触发一个在一个 ja
  • jQuery 验证:如何不显示错误?或者如何将错误显示为工具提示?

    我希望我的错误浮动在未验证的输入字段上方 左对齐 我怎样才能做到这一点 如果不能 我怎样才能关闭错误 我仍然希望字段能够验证 并在错误时突出显示 但不希望显示实际的错误消息 我似乎无法在 jQuery 文档中找到任何可以让我打开 关闭它们的
  • jQuery 中的 Javascript .files[0] 属性

    jQuery 中是否有与此语句等效的语句 var value document getElementById id files 0 使用附加 files 0 的标准 jQuery 选择器似乎不起作用 并且我找不到与 files 等效的 jQ
  • 有没有模拟 Facebook 游览的 jQuery 插件?

    我指的是 Facebook 游览 可能使用开箱即用的 Facebook CSS 我已经知道这两个 http tympanus net codrops 2010 12 21 website tour http tympanus net cod
  • jQuery .val() 返回单选按钮的未定义

    我正在尝试获取 jQuery 中选中的单选按钮值 但它返回的值是 未定义 我搜索了这个问题的解决方案 但对我来说没有任何作用 我的 HTML 代码
  • 使用模态表单 ajax 超出 HTMLFormElement.toString 的最大调用堆栈大小

    我想使用模态窗口中的 ajax 请求提交表单 单击此链接可打开该模式 a class btn btn primary i class fa fa edit i Write a review a 模态窗口 div class modal fa
  • 用数组反向查找对象

    假设我有一个这样的对象 resourceMap a 0 1 2 3 4 5 6 7 8 9 10 b 11 12 c 21 23 d 54 55 56 57 510 确定是否的最佳方法是什么resourceId 21将会 c 我们不知道钥匙
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 根据用户输入使用 Jquery 显示/隐藏字段

    li class numeric optional li
  • Android复杂布局线性和相对

    I have to implement a layout like shown in the diagram and I do not know the best combination to achieve the required de
  • Jquery,清除/清空 tbody 元素的所有内容?

    我认为这会相当简单 但似乎空方法无法清除我拥有的 tbody 如果有人知道执行此操作的正确方法 我将不胜感激 我只想删除 tbody 中包含的所有内容 到目前为止我正在尝试 tbodyid empty HTML table tbody tr
  • 您如何看待引导模式触发器的相应回调?

    On 引导模态 http getbootstrap com javascript modals 我们知道我们可以为触发器绑定事件 例如show or hide using show shown hide hidden 但此事件绑定仅适用于一
  • 我可以使用 jQuery 动态创建文件(及其内容)吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这是我的 HTML 代码 ul li

随机推荐

  • github 自动将组添加到每个新存储库

    我的组织中存在一个问题 每当创建新存储库时 其中一个组就会自动添加到具有读取权限的该存储库中 即使具有组织所有者权限 也无法将其从那里删除 它指出这是由组织所有者管理的 但在该组或组织设置中都看不到这样的设置 有什么想法如何更改 删除 自动
  • Selenium 中 waitForPageToLoad 的替代方案

    我在页面上有一系列链接 需要不同的时间来加载 我想捕获每个链接所花费的时间 我遇到的问题是 如果超过 waitForPageToLoad 时间 则会导致测试失败 并且我的其余链接没有得到测试 我知道我可以跳过测试中的可疑链接或设置超出预期的
  • JPA 中列表的保存顺序

    我对JPA有以下疑问 我可以保存 java util List 中元素的顺序吗 在我的应用程序中 将元素放入列表中的顺序很重要 但是当我从数据库中获取这些集合后 顺序并不相同 如预期 你能告诉我一种解决这个问题的方法吗 附 我放入集合中的实
  • 计算 DISTINCT 值的出现次数

    我试图找到一个 MySQL 查询 该查询将在特定字段中查找不同的值 计算该值出现的次数 然后按计数对结果进行排序 示例数据库 id name 1 Mark 2 Mike 3 Paul 4 Mike 5 Mike 6 John 7 Mark
  • GAE - 部署错误:“AttributeError:无法设置属性”

    当我尝试部署我的应用程序时 出现以下错误 Starting update of app flyingbat123 version 0 1 Getting current resource limits Password for avigma
  • Prestashop 送货时选择隐藏/显示付款方式

    我试图弄清楚如何在选择送货方式时显示 隐藏付款方式 我尝试了几个解决方案 但它对我不起作用 其中之一是这个
  • 如何在Flutter中像Youtube一样显示之前的时间

    我正在编写一个 flutter 应用程序来克隆一些 Youtube 功能Youtube API V3 该应用程序获取字符串形式的视频时间戳来自 YouTube 视频 API 每个时间戳都具有以下格式 YYYY MM DDTHH MM SSZ
  • 如何计算新点位于 Voronoi 图的哪个位置?

    我写了一个小脚本来显示 voronoi 图M点来自本教程 https docs scipy org doc scipy 0 18 1 reference generated scipy spatial Voronoi html I use
  • 如何获取 Xamarin.Android 的 Mono VM 的堆快照?

    背景 我正在尝试追踪 Xamarin Android 应用程序中的内存泄漏 使用 DDMS 和 Eclipse Memory Profiler 我能够查看哪些对象处于活动状态 当试图跟踪是什么让它们保持活力时 GC Root 我只看到 本机
  • 如何删除前导和尾随空格?

    我在用着awk gsub t t print in txt gt out txt删除前导和尾随空格 问题是输出文件实际上有尾随空格 所有行的长度相同 它们都用空格填充 我缺少什么 UPDATE 1 该问题可能是由于尾随空格不是 正常 空格而
  • Nuxt,转换不适用于子路由(使用 NuxtChild 显示)

    我无法为我的子路线进行转换 我有以下页面 pages child id vue child vue index vue 在索引和任何子路由之间导航都会触发转换 但是当从一个子路由导航到另一子路由时 不会发生转换 注意有静态路由 child和
  • extern 与 c 中变量的全局定义

    我有以下我感兴趣的源代码 include
  • 从 XML 结束标记填充数组

    我正在尝试创建一个字段名称数组 以便稍后在脚本中使用 正则表达式让我大吃一惊 我已经很久没有写代码了 字段名称嵌入在 XML 标记中 因此我想可以从第一行数据的结束标记中提取它们 我看不到如何正确填充数组 任何人都可以为我提供一些启示吗 m
  • 万向节锁是怎么发生的?

    所以我在网上搜索 我在想象如何 发生万向节锁定 根据我所看到的 当两个或多个轴对齐失去一定的自由度时就会发生这种情况 但我无法想象这些轴将如何开始对齐 我的意思是 当我绕 x 轴旋转对象时 例如 y 轴和 z 轴是否不会随 X 轴旋转以保持
  • 使用 PyQt5 将 qDebug 输出重定向到文件

    我使用 python2 7 Qt5 5 和 PyQt5 实现了一个应用程序 我使用Python记录器工作logging 模块 日志消息都发送到 stderr 和日志文件 但是 Qt 日志消息仅出现在 stderr 中 我找不到将它们重定向到
  • 带有标记和线条的传单

    我将 leafletjs 与 geojson 一起使用 但我无法同时使用标记绘制折线 所以我的解决方案是先绘制折线 然后添加标记 我认为这不是一个好的方法 那么还有其他解决方案吗 这是我的代码 function DrawLine mymap
  • SSRS独特的查找集函数

    我在用着Join Lookupset 查找返回序列号的唯一组值 这是我的功能 Join LookupSet Fields itemId Value Fields UseByDate Value Fields rackId Value Fie
  • Python:如何使用 BeautifulSoup 模拟点击

    我不想使用 selenium 因为我不想打开任何浏览器 该按钮会触发 Javascript 方法来更改页面中的某些内容 我想模拟按钮单击 以便我可以从中获取 输出 示例 不是按钮实际执行的操作 我输入一个名字 例如 John 按下按钮 它会
  • 如何在 Action 类之外将错误消息从 Struts2 发布到 HTML

    我有一个注册程序 当我在数据库中插入一条记录时 我将实例化一个类并调用该方法insert 当我插入相同的记录时 当然会出现重复数据错误和大量错误消息 我想捕捉它try and catch 我能做到 但是 我不知道如何将消息显示到 JSP 据
  • 提高 jQuery 模板性能

    Update 显然 jQuery 模板可以被编译 并且它有助于提高模板的性能if 语句 shown here http jsperf com complex template vs concat 4 但如图所示here http jsper