1. 什么是服务端渲染(SSR)
在大多数Web应用中,客户端会发送请求到服务器,服务器会返回HTML代码和JavaScript,客户端接收到后通过JavaScript渲染出网页效果。这种方式被称作客户端渲染(Client-side Rendering,CSR),优点在于页面展示更流畅,操作更快速,但是当页面数据比较多时,首屏渲染会比较慢,且不利于SEO优化。
与之不同的是,服务端渲染(Server-side Rendering,SSR)是指在服务器端将JavaScript代码运行后返回最终渲染好的HTML网页,而不是像CSR那样先返回JavaScript代码再在客户端渲染。这种方式的优点在于可以更快的展现出内容,加快首屏渲染速度,同时可以更好地支持SEO。但是服务端渲染带来的代价是启动时间较长,页面的交互体验也不如CSR。因此在实际项目中需要根据需求进行选择。
Angular是一个基于前端的开发框架,通常使用CSR来进行渲染,但是它同时也提供了支持SSR的方式,可以方便的应用到实际项目中。
2. Angular中的服务端渲染(SSR)
2.1. 为什么要使用服务端渲染
作为一种用于开发Web应用的框架,Angular可以实现复杂的互动体验,但是在某些情况下需要使用服务端渲染,比如:
SEO优化:使用SSR可以直接获得完整的HTML源码,便于搜索引擎抓取。
加快首屏渲染:使用SSR可以在向客户端发送JavaScript代码之前,提前将HTML内容发送给客户端,减少等待时间。
提高性能:如果客户端网络不稳定或者设备性能较差,使用SSR可以提高性能。
2.2. 如何实现服务端渲染
Angular实现SSR的思路是在服务端使用Node.js运行Angular应用,渲染的结果是HTML字符串。当客户端请求到达时,服务器端向客户端发送HTML字符串,客户端再使用Angular的CSR模式应用JavaScript代码来进行渲染。
整个流程的心脏是一个Angular Universal的库(一个官方支持的Angular SSR工具)及其插件,该插件允许构建快速、简单和可扩展的服务器端渲染应用程序。
2.3. 如何配置服务端渲染
服务端渲染在Angular中的支持需要添加一些必要的依赖和配置,下面是Angular官方文档中的示例:
// 在命令行中执行以下命令,添加依赖
ng add @nguniversal/express-engine
// 生成服务器渲染的应用程序
ng generate universal --clientProject PROJECT_NAME
// 安装express服务器
npm install express --save
// 创建服务器代码文件
mkdir server
cd server
npm init
npm install @nguniversal/express-engine @nguniversal/module-map-ngfactory-loader ts-loader typescript webpack webpack-cli express compression --save
// 创建服务器代码文件
touch server.ts
该配置的核心内容是:
添加@nguniversal/express-engine依赖:这是支持服务器渲染的主要依赖。
生成服务器渲染的应用程序:这个命令会在项目中创建一个文件夹,其中包括了一个Angular服务端代码,以便在服务器端上进行执行,并生成HTML字符串数据。
安装和使用express:启用一个Node.js服务器,使应用在动态应用服务(HTTP)上运行。
创建服务器代码文件:创建服务器端渲染的代码文件,并添加必要的依赖。
3. 总结
Angular提供了服务端渲染的方式可以加快应用的首屏响应时间,同时有助于SEO。但是服务端渲染也有启动较慢、无法支持实时交互等缺点,需要根据实际需求进行选择。