我应该使用JavaScript还是服务器渲染此模板?

TIM*_*MEX 11 html javascript templates backbone.js

我正在渲染新闻Feed.

我打算使用Backbone.js作为我的javascript东西,因为我厌倦了用JQuery做手工DOM绑定.

所以现在我正在考虑两种选择.

  1. 当用户加载页面时,"新闻订阅源"容器为空.但是该页面触发了一个javascript,它将新闻的项目呈现在屏幕上.这将与Backbone的模型和集合等相关联.

  2. 当用户加载页面时,服务器呈现"新闻订阅源".即使javascript被关闭,项目仍会显示,因为服务器通过模板引擎呈现它.

我想使用Backbone.js来保持我的javascript清洁.那么,我应该选择#1,对吧?但#1比#2复杂得多.

顺便说一句,我问这个问题的原因是因为我不想使用Backbone.js的路由功能.我会单独加载每个页面,并使用Backbone作为页面的各个项目.换句话说,我正在使用Backbone.js.

如果我要使用Backbone.js的路由功能,那么明显的答案是#1,对吧?但是我担心建立路线系统需要花费太多时间,时间也应该平衡到我的等式中.

如果这个问题令人困惑,我很抱歉:我只想知道使用Backbone.js的最佳做法并节省时间.

Pla*_*ure 26

两者都有优点和缺点,所以我会这样说:根据您的要求选择最适合的选项.

我不知道Backbone.js,所以我将继续回答客户端与服务器端的渲染.

客户端渲染

这种方法允许您在服务器端快速呈现结构,然后让用户的JavaScript获取实际内容.

优点:

  • 更快的感知用户体验:如果初始渲染上有足够的静态内容,那么用户可以更快地获取其页面(或至少在其开头),并且他们不会对动态内容感到困扰,因为很可能会也很快地渲染.
  • 更好地控制缓存:通过要求浏览器发出多个请求,您可以设置服务器以根据您的要求为每个URL使用不同的缓存头.通过这种方式,您可以允许用户缓存初始页面呈现,但要求用户每次都获取动态(更改)内容.

缺点:

  • 用户必须启用JavaScript:这是一个显而易见的问题,我甚至不需要提及它,但是如果你没有为你的JS提供一个优雅的替代方案,那么你正在削减用户群的一个(非常小)部分.沉重的网站.
  • 复杂性:这个有点主观,但在某些方面,用服务器端语言提供所有内容并且不需要那么多来回更简单.当然,它可以双向进行.
  • 缓慢的后处理:这取决于浏览器,但事实是如果在检索动态内容后需要进行大量DOM操作或其他后处理,如果服务器是服务器,则让服务器执行此操作可能会更快充分利用.大多数浏览器都擅长基本的DOM操作,但如果你必须进行JSON解析,排序,算术等,那么服务器上的一些浏览器可能会更快.

服务器端渲染

这种方法允许用户一次接收所有内容,也适用于没有良好JavaScript支持的浏览器,但这也意味着在浏览器获得第一个<html>标记之前所有内容都需要更长的时间.

优点:

  • 内容一次出现:如果您的服务器速度很快,它将同时呈现所有内容,就是这样.没有凌乱的XmlHttpRequests(还有人还在直接使用它们吗?).
  • 快速后处理:就像您不希望应用程序层对数据库查询集进行排序一样,因为数据库速度更快,您可能还希望在服务器端保留大量处理.如果您采用客户端方法进行设计,则很容易被丢弃并将处理放在错误的位置.

缺点:

  • 感知用户体验较慢:在服务器完成所有工作之前,用户将无法看到单个字节.当然,服务器可能会通过它进行压缩,但是在用户方面它仍然需要几秒钟,你可以通过立即渲染它们来帮助它们.
  • 也不会扩展,因为服务器在请求上花费更多时间:可能是您真的希望服务器快速完成请求并继续下一个连接.

哪些对您的要求最重要?这应该告诉你的决定.