【问题标题】:Javascript templates (eg.Underscore / Lodash): informative adviceJavascript 模板(例如,Underscore / Lodash):信息性建议
【发布时间】:2013-11-12 18:48:38
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 这是<p>I want 11 pancakes.</p>和数字11的区别。一个是一个不透明的字符串,除了将它扔到页面上之外,您无法做任何事情,另一个是一段有意义的数据,您可以使用<p>I want <%= n %> pancakes.</p> 模板将其操作或放在页面上,或者放在其他地方<td>Pancakes:</td><td><%= n %></td> 模板。
  • 有道理。因此,归结为信息是以您可以操纵的形式(即json)从服务器下载的事实;然后我想知道是否应该针对每种情况独立评估在某些情况下使用模板是否有用;在下载不可重用信息列表的情况下,服务器创建的模板会更高效吗?我的意思是,从服务器直接获取 html 并将其放入 div 容器中。
  • 通常你最终会以一种或另一种方式全力以赴。今天不透明的 HTML 大块是明天早上的关键数据。
  • 谢谢,这让我明白了。确实,json 可以让我以后随时在客户端动态操作我的数据,而不需要一直修改我的服务器脚本。我会像大多数 bb 开发者一样遵守约定。

标签: javascript underscore.js template-engine lodash


【解决方案1】:

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

JSON 响应 (REST) 用于客户端渲染

[
    {"name": "Jimmy", "email": "jimmy@gmail.com"},
    {"name:" "Billy", "email": "billy@gmail.com"}
]

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

<table>
    <tr>
        <td>
            Jimmy
        </td>
        <td>
            jimmy@gmail.com
        </td>
    </tr>
    <tr>
        <td>
            Billy
        </td>
        <td>
            billy@gmail.com
        </td>
    </tr>
</table>

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

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

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

【讨论】:

  • 这听起来非常合乎逻辑和真实。我目前正在尝试骨干网,老实说,我需要一段时间来适应它。这些例子是一回事,但我发现如果没有更有经验的人有时会指导您朝着正确的方向前进,要真正做您需要的事情并不容易。
  • 最好的方法是尝试在一些现有的代码库上工作,例如来自开源的东西,并弄清楚事情是如何协同工作的。但我敢打赌,30 天后你会发现它既简单又有趣。
  • 迫不及待地想要达到这一点。感谢您对此事的建议!
猜你喜欢
  • 2016-10-24
  • 2011-12-29
  • 2014-01-06
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
相关资源
最近更新 更多