【问题标题】:When to use a back-end templating engine and when to use a front-end templating engine? [closed]什么时候使用后端模板引擎,什么时候使用前端模板引擎? [关闭]
【发布时间】:2014-08-24 21:33:42
【问题描述】:

大多数传统 MVC 框架都包含自己的模板解决方案(Jinja2、Mako 等)。如果决定使用其中一种新的 ui 框架,例如 angular 或 Backbone,他们似乎鼓励使用前端模板解决方案。

性能有什么不同吗?无论哪种方式都有哪些优点和缺点?在使用这些js模板解决方案时,ie或其他浏览器是否存在问题?

【问题讨论】:

  • 明显的缺点:使用前端模板您的服务器实际上并没有返回一个充满数据的文档。这将对 SEO 或无法使用 Javascript 的客户产生影响。也许你不在乎,也许你在乎。
  • 权衡:编译时间与网络时间

标签: javascript template-engine templating client-side-templating


【解决方案1】:

视情况而定,一个主要因素可能是带宽使用量的显着变化。

例如,我的最新项目包括在聊天(和其他地方)中使用颜色代码的功能。这些代码如下所示:

`1blue `2green `3yellow `4red `bbold on `Bbold off `b`iBold Italic...

可以解析这个服务器端并返回:

<span style="color:blue">blue </span><span style="color:green">green</span>...

但是看看我是怎么只写了两个词的,我已经比源文本长了!相反,我选择在前端用 JavaScript 实现解析器。这需要从服务器(否则必须为每个用户解析这些东西)到客户端(只处理一个用户)的大量处理。

它还有一个优点是我可以通过插入同一个解析器来实现实时预览,但这在这里无关紧要。

此外,可以缓存客户端模板,进一步减少需要发送的数据量。这对可能没有无限数据的移动用户特别有益(那些可怜的人......我为他们哭泣......不是真的)

就个人而言,如果可以选择,我强烈推荐客户端模板(尽管按照我通常的风格,我会避开所有预制的解决方案并制作我自己的 XD,我很奇怪)以获得各种性能原因。显然,主要缺点是“没有 JavaScript = 没有网站”,但我对此很好,因为整个网站都依赖于 JS...

【讨论】:

  • 忽略缓存,将模板库添加到您的页面可能意味着客户端必须下载该 js 文件,该文件可能比您冗长的服务器端生成的模板包含更多代码。
  • @Ramin 你不能只说“忽略最大的贡献者为什么这是一个好主意,这是一个非常糟糕的主意”:p
  • 嗯,第一次访问缓存不适用。
  • @Ramin 所以?除非您的跳出率高得离谱,否则您将在最多两个页面加载内获得更大 JS 文件的额外开销。s
【解决方案2】:

我对此的看法很简单,真的。

如果您想对网站的结构进行模板化,请使用服务器端模板化引擎。如果您想对网站的数据进行模板化,请使用客户端模板引擎。并且两者都使用并没有什么问题,只要它们没有大量的竞争代币。

一个非常常见的例子是使用 ASP.Net MVC 来管理网站结构的主体,使用 razor 模板引擎,并使用 JavaScript 客户端库(如 Angular.js)来简化各个页面上的数据结构。

【讨论】:

  • 我就是这么想的,但是拥有一个客户端模板引擎而不用它来做所有事情——卸载服务器必须做的工作不是浪费吗?
  • 在每种情况下都需要权衡取舍。如果一个页面有 3 个数据项,那么服务器可以像客户端一样有效地处理它们。如果页面有 3,000 个数据项,您不会希望在每个页面转换时都加载该数据项。
  • 类似地,如果页面只有几个不同的视图,那么没有理由不能在启动时将它们推送到浏览器。但是,如果有很多不同的视图、彼此无关的对象视图等,那么服务器是该逻辑的更好位置。
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多