JavaScript 模板(例如Underscore/Lodash): informative advice

标签 javascript underscore.js template-engine lodash

我目前正在学习 Javascript 模板,并且有一个信息丰富的问题​​。

与在服务器上收集 html 字符串(例如 PHP)并通过 jQuery Ajax 调用返回相比,使用来自服务器的 json 数据填充 javascript 模板有什么好处?

由于此模板是在客户端使用 Javascript 执行的,因此在服务器上创建模板不是会快很多吗(服务器比客户端更强大)?

做这个客户端的实际好处是什么?
我遇到这个问题是因为我目前正在学习如何使用 Backbone 开发 SPA,我想将其与 Marionette 一起使用并需要它。

谢谢。

最佳答案

你说服务器比客户端更强大。是的,但是如果您有 1000 个客户端请求该页面呢?这对服务器来说变得很困难,你尝试使用服务器端缓存、负载平衡等。所以客户端模板渲染可以让每个客户端关心自己。它极大地减轻了服务器的负担。例如,您可以提供一次 HTML 模板和 JavaScript 代码,浏览器将对其进行缓存。因此,服务器甚至不会在当前客户端的每个下一个请求中发送这些内容,而仅确保实际的数据提供和操作,例如通过 REST 架构。通过这种方式,您主要只传输数据。 Backbone 和其他客户端框架允许您减轻服务器的负担。当每个客户端为自己呈现页面或页面的一部分时,它的工作速度总是更快。 只需比较这两种情况下“GET Users”请求的响应即可:

JSON 响应 (REST) 用于客户端呈现:

[
    {"name": "Jimmy", "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7d17141010043d1a101c1411531e1210" rel="noreferrer noopener nofollow">[email protected]</a>"},
    {"name:" "Billy", "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a78737676635a7d777b737634797577" rel="noreferrer noopener nofollow">[email protected]</a>"}
]

HTML响应(传统)由服务器呈现:

<table>
    <tr>
        <td>
            Jimmy
        </td>
        <td>
            <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="076d6e6a6a7e47606a666e6b2964686a" rel="noreferrer noopener nofollow">[email protected]</a>
        </td>
    </tr>
    <tr>
        <td>
            Billy
        </td>
        <td>
            <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d9bbb0b5b5a099beb4b8b0b5f7bab6b4" rel="noreferrer noopener nofollow">[email protected]</a>
        </td>
    </tr>
</table>

显然,如果您有 100 个用户需要呈现,您将需要在服务器端呈现更多的 HTML 并通过 HTTP(CPU、RAM、带宽)进行传输。

但在客户端渲染的情况下,您只需要一个表格模板和一个(!)表格行(例如特定示例)的模板即可在循环中渲染用户。

所以服务器只关心数据、认证和授权。 该应用程序是分布式的。您卸载服务器的负载并允许浏览器执行所有非敏感工作。每个客户都关心自己。

关于JavaScript 模板(例如Underscore/Lodash): informative advice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937451/

相关文章:

javascript - 从 _.map() 返回唯一值

javascript - 如何从 JSON 对象中删除内部属性

regex - 在 PowerShell 中用环境变量替换正则表达式 token

css - 编辑 drupal 主题菜单 css

javascript - 如果我在打开 chrome/opera 浏览器控制台的情况下 console.log 未处理的拒绝事件,为什么拒绝处理不会触发(被捕获)?

javascript - 如何避免IE7和IE8中的下拉ActiveX警告?

javascript - 使用 Javascript 的选定单词的索引

javascript - REgex 不适用于空白 javascript

javascript - 为什么下划线使用 `root` 而不是 `this` ?

java - 如何自动从html页面创建模板?