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

Javascript 为什么服务器端HTML呈现比客户端快?,javascript,twitter,backbone.js,html-parsing,handlebars.js,Javascript,Twitter,Backbone.js,Html Parsing,Handlebars.js,我正在一个大型网站上工作,我们正在将许多功能移到客户端(Require.js、Backbone和handlebar堆栈)。甚至还有关于可能将所有渲染移动到客户端的讨论 但读了一些文章,特别是关于Twitter不再使用客户端渲染的文章,其中提到服务器端更快/更可靠,我开始有疑问。我不明白,用JSON和模板在JS中呈现相当简单的HTML小部件是如何在双核CPU上以4-8GB RAM呈现的,这比在服务器端应用程序中创建几十个包含要慢。有没有关于这方面的实际基准数据 此外,似乎通过服务器端模板引擎解析H

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

但读了一些文章,特别是关于Twitter不再使用客户端渲染的文章,其中提到服务器端更快/更可靠,我开始有疑问。我不明白,用JSON和模板在JS中呈现相当简单的HTML小部件是如何在双核CPU上以4-8GB RAM呈现的,这比在服务器端应用程序中创建几十个包含要慢。有没有关于这方面的实际基准数据


此外,似乎通过服务器端模板引擎解析HTML模板比从Handlebar模板呈现相同的HTML代码快不了多少,特别是如果这是一个预编译JS函数的话?

原因有很多:

  • JavaScript是解释语言,比服务器端速度慢 (通常用编译语言完成)
  • DOM操作速度很慢,如果您在JS中操作它,它会很慢 导致性能不佳。有很多方法可以克服这种情况 准备文本呈现,然后对其进行评估,这实际上可能使您尽可能接近服务器端呈现
  • 有些浏览器太慢了,尤其是旧的IE
    • 编译语言与解释javascript的性能对比
    • 缓存,即提供另一个用户已经请求的完全相同的页面,这样就不需要每个客户机呈现它。非常适合流量巨大的网站——即新闻网站。微缓存甚至可以提供近乎实时的更新,同时还可以提供来自缓存的大量流量。无需等待客户端呈现
    • 减少对使用旧电脑或浏览器速度慢/性能差的用户的依赖
    • 只需担心渲染,较少依赖不同浏览器如何管理DOM(可靠性)
    但对于复杂的UI,交互的客户端呈现将提供更快捷的用户体验


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

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

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

    底线是,在典型的开发人员环境中,您最多有500毫秒的时间从干净的缓存中呈现页面。较慢的设备和网络将使这种滞后几乎无法为大多数用户所接受


    因此,在页面加载期间,您可能有50-100毫秒的时间在JavaScript中进行操作,所有这些都是总计,这意味着呈现复杂页面并不容易。

    我猜DOM操作比字符串操作慢。你能链接到其中的一些文章吗?尤其是这篇文章,该网站相当大(不确定用户数量,但它托管在60多台服务器上)。大部分内容都是个性化的。这是一个大型的协作和项目管理应用程序。考虑到协作和项目管理,我还是会在客户端上进行脚本渲染。交互性需要快速的响应,所以无论如何你都需要js。我不会真的担心旧的IE浏览器。我们不支持IE8下的IE。我也不会担心少数机器和连接速度慢的用户。我很好奇,在同一台机器、同一个浏览器上,只有一个加载HTML,另一个加载JSON并在客户端呈现,性能会慢多少。我想我只需要设置一些测试,这取决于你在做多少DOM操作和你在做多少JavaScript。例如,如果要插入1000个DOM元素,则脚本渲染可能需要几秒钟,而对同一个1000个DOM元素进行一次计算(服务器渲染或文本)则需要几毫秒。这些数字可以显示差异,但实际数字取决于您的页面、机器功率和浏览器。