什么是JavaScript的服务器端渲染?

29

一些像Dust.js这样的JavaScript框架声称它们也支持服务器端渲染(除了客户端渲染)。那么,有人能解释一下它是如何工作的吗?我理解JavaScript总是在浏览器运行时执行。


1
JavaScript 不仅仅只在浏览器上运行。http://nodejs.org/ - epascarello
5
我认为他们的意思是模板渲染,而不是图形渲染。 - David
@DavidCzihak,您能否更详细地解释一下它们之间的区别。 - Aravind Yarram
阅读@chrx的回答,那是一个相当准确的总结。 - David
4个回答

19

JavaScript可以通过像 Node.js 这样的系统在服务器上运行。

关于Dust.js,它是一个模板引擎,可在服务器上生成超文本和HTML,并将内容直接发送到客户端浏览器。这通常用于避免由浏览器要求通过类似Dust.js框架的视图模板来填充视图的瞬时空模板。缺点是在向客户端发送数据之前,在服务器上需要完成更多工作,因此页面加载时间会稍微长一些。

请查看这个问题了解服务器端渲染的利弊。必须在慢的后处理(需要用户的浏览器做这项工作)和慢的预处理(使服务器在用户看到任何东西之前完成工作)之间进行选择。


我知道你可以完全使用node.js构建服务器端应用程序。我的问题是关于客户端UI的。 - Aravind Yarram
2
@Pangea 原始引用并不是指 GUI 渲染浏览器和监视器实现,而是指“渲染文本内容”(通常是标记)在服务器端和客户端上进行。也许,“生成”会是更好的词选择? :) - Jonathan Lonowski

3

服务器端渲染是将JavaScript转换为静态的html和css。 以前,JS通常会在最后加载,以优化网站性能。 但问题在于这会影响SEO。 因此,服务器端渲染成为解决此问题的方法。


3

主要有三种渲染方法:

客户端渲染 (CSR)

是现代前端框架如ReactJS的默认渲染过程,服务器只返回一个几乎为空的index.html文件,然后用户浏览器使用Javascript加载和构建所有内容。

服务器端渲染 (SSR):

指生成HTML内容的服务器进程,根据每个请求按需执行。通常,您需要设置一个运行类似于Express或Next.js(使用NodeJS)的服务器,该服务器会在每个请求中呈现您的React应用程序,就像传统的PHP或Rails基于网站一样。

静态网站生成器 (SSG):

服务器端渲染和静态网站生成器都涉及为站点的每个URL生成HTML。不同之处在于静态渲染在构建时间仅发生一次,而服务器渲染是在用户请求每个文件时按需执行。

对于静态渲染,您需要预先为每个可能的请求生成响应。但是,如果您正在构建无法预测所有可能请求的内容,例如搜索页面怎么办?或者如果您有很多用户生成的内容,而且每个请求都会更改响应怎么办?在这种情况下,您需要服务器端渲染。

*** 那么应该使用哪个方法呢? ***

这取决于情况。

如果SEO不相关 - 例如在登录界面后运行的应用程序 - 那么CSR就可以了,您只需要像ReactJS一样的东西即可。

如果您需要良好的SEO:

a) 如果您可以预测内容(以便在构建时间生成它),则需要SSG并选择类似于NextJS的东西。

b) 如果无法预测内容/可能的请求,则服务器需要按需生成页面,因此需要SSR并选择类似于NextJS的东西。

注意:NextJS允许您有选择地混合同一个项目中的三个主要呈现形式。市场上还有其他好的解决方案,如Gatsby。


-1

服务器端渲染(SSR)是在服务器端执行JavaScript [SPA应用程序]的过程。

与客户端渲染相反,客户端渲染是在客户端执行JavaScript的过程。

服务器端渲染是一种相对较新的技术/术语,它使得像React或Angular这样的SPA框架更加友好于SEO。由于服务器需要额外的工作,因此该技术效率相对较低。因此,有人应该首先考虑创建多页面应用程序,而不是创建单页面应用程序,然后在服务器上执行它。

SSR术语有些模糊和混淆,因为有些人将其用于传统的多页面网站,例如那些建立在WordPress上的网站,或者任何使用PHP或Java后端生成HTML页面的网站,而有些人仅将其用于在服务器上呈现的SPA。

在我看来,后者“更正确”,因为它会产生较少的混淆。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接