为什么服务器端HTML呈现比客户端更快?

mvb*_*fst 12 javascript twitter html-parsing backbone.js handlebars.js

我正在一个大型网站上工作,我们正在向客户端移动许多功能(Require.js,Backbone和Handlebars堆栈).甚至有关于可能将所有渲染移动到客户端的讨论.

但是阅读一些文章,尤其是关于Twitter远离客户端渲染的文章,提到服务器端更快/更可靠,我开始有疑问.我不明白如何在JS中从JSON渲染相当简单的HTML小部件,模板是双核CPU上的现代浏览器,具有4-8 GB RAM,比在服务器端应用程序中制作数十个包含要慢.有关于此的实际真实生活基准数字吗?

此外,似乎通过服务器端模板引擎解析HTML模板不能比从Handlebars模板渲染相同的HTML代码更快,特别是如果这是一个precomp JS函数?

alb*_*ran 8

原因有很多:

  1. JavaScript是解释语言,比服务器端慢(通常用编译语言完成)
  2. DOM操作很慢,如果你在JS中操作它会导致性能不佳.有一些方法可以克服这个问题,例如在文本中准备渲染然后对其进行评估,这实际上可能会使您接近服务器端渲染.
  3. 有些浏览器太慢了,特别是老IE

  • 取决于您正在执行多少 DOM 操作以及您正在执行多少 JavaScript。例如,如果您要插入一千个 DOM 元素,您的脚本可能需要几秒钟才能呈现,而对相同的一千个 DOM 元素进行一次评估(服务器呈现或文本)则需要几毫秒。这些数字向您展示了差异,但实际数字取决于您的页面、机器功率和浏览器。 (2认同)

Pet*_*SFT 5

  • 编译型语言与解释型 JavaScript 的性能比较
  • 缓存,即 - 提供另一个用户已经请求的完全相同的页面,这消除了每个客户端渲染它的需要。非常适合流量大的网站 - 即新闻网站。微缓存甚至可以提供近乎实时的更新,同时还可以提供来自缓存的大量流量。无需等待客户端渲染
  • 减少对使用旧计算机或缓慢/损坏的浏览器的用户的依赖
  • 只需要关心渲染,较少依赖不同浏览器如何管理 DOM(可靠性)

但对于复杂的 UI,交互的客户端渲染将提供更快捷的用户体验。

这实际上取决于您想要优化的性能以及针对多少用户。