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

时间:2012-10-28 04:23:16

标签: javascript twitter backbone.js html-parsing handlebars.js

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

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

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

3 个答案:

答案 0 :(得分:8)

原因有很多:

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

答案 1 :(得分:3)

  • 编译语言与解释javascript的性能
  • 缓存,即 - 提供另一个用户已经请求的完全相同的页面,这消除了每个客户端呈现它的需要。非常适合拥有巨大流量的网站 - 即新闻网站。微缓存甚至可以提供近乎实时的更新,同时从缓存中提供大量流量。无需等待客户端呈现
  • 减少对使用旧计算机或缓慢/残缺浏览器的用户的依赖
  • 只需要担心渲染,减少对不同浏览器管理DOM(可靠性)的依赖程度

但对于复杂的用户界面,客户端的交互呈现将提供更快捷的用户体验。

这实际上取决于您尝试优化的性能以及用户数量。

答案 2 :(得分:0)

要在客户端运行代码,首先必须加载它。服务器端代码刚刚在服务器启动时加载,而客户端代码必须在每次页面加载时加载。在任何情况下,必须在加载页面时解释代码,即使文件已经被缓存。您可能还在浏览器中缓存了JS解析树,但我认为这些不会持久化,因此它们不会长寿。

这意味着无论JavaScript多快(并且速度非常快),都必须在用户等待时执行工作。许多研究表明,页面加载时间极大地影响了用户对网站质量和相关性的感知。

最重要的是,您最多需要500毫秒来从典型的开发人员环境中的干净缓存中呈现您的页面。较慢的设备和网络将使大多数用户几乎无法接受这种延迟。

因此,在页面加载期间,您可能需要50-100ms才能在JavaScript中执行操作,所有这些都是总计,这意味着渲染复杂的页面,这很不容易。