服务器端渲染(SSR)和客户端渲染(CSR)

简介: 服务器端渲染(SSR)和客户端渲染(CSR)

大家好,我是阿萨。今天介绍下服务器端渲染和客户端渲染。


服务器端渲染(SSR)的基本概念


服务器端渲染是指在服务器端为网页生成HTML。

  • 请求时的SSR: 服务器端呈现可能发生在请求时,在这种情况下,服务器在运行时为每个URL请求动态生成HTML。这也称为动态服务器端渲染。
  • 构建时的SSR:或者,web页面的HTML可以在“构建”时在服务器端预先生成,当网页被请求时,这个预先生成的静态HTML将返回给浏览器即HTML是预先生成的,而不是在请求时实时生成的。这也被称为预渲染。


客户端渲染(CSR)基本概念


客户端呈现意味着在浏览器端生成HTML组件,方法是在浏览器中执行Javascript代码,操作HTML DOM来构建HTML节点。


服务器端渲染(SSR)


在服务器端渲染(SSR)中,网页的HTML组件是在服务器端生成的。当浏览器请求SSR网页时,浏览器会收到一个完全形成的HTML网页,其中已经创建了HTML组件,看起来像这样,


<!DOCTYPE html><html><head><title> Web Page Rendered on Server Side </title></head><body><h1> This is a Heading   </h1><p>  This is a paragraph </p><div><p> This is a form </p><form><label for="fname">First name:</label><br><input type="text" id="fname" name="fname"><br><label for="lname">Last name:</label><br><input type="text" id="lname" name="lname"></form><div></body></html>


浏览器所要做的就是解析这个HTML来生成HTML DOM并显示网页。服务器端呈现可以在构建时完成,这将预先生成HTML,或者服务器端呈现可以在来自浏览器的每个传入请求的请求时完成。


动态服务器端呈现(SSR),即请求时的服务器端呈现,需要在运行时运行web服务器,以接收导航请求,获取外部数据(在服务器端),动态生成HTML,然后将完全形成的HTML返回给浏览器。


网站是使用传统的服务器端语言,如PHP, ASP。NET (ASP), Java (JSP), Ruby等是完全的服务器端渲染。请注意,浏览器只理解HTML、CSS和Javascript,而服务器端语言(即PHP、。net、Ruby等)基本上是在服务器端以编程方式生成HTML,然后将HTML发送给浏览器。


所以不管你是使用PHP, Java,还是Ruby,作为你的后台语言,在SSR中它们都会生成HTML并返回给浏览器。服务器端语言通常在开发过程中使用一些web框架和HTML模板来促进服务器端HTML的生成。


SSR的优势


  • 更好的搜索引擎优化和页面排名,因为HTML是完全形成在服务器端和网络爬虫更容易能够索引HTML页面。
  • CSR App的初始页面呈现加载时间更快,因为从服务器接收到的HTML可以被浏览器快速解析并立即显示,并且不需要单独的JS包下载和执行来显示网页。
  • 一旦网页在浏览器中可见,它就是完全交互的 即FCP = TTI
  • 由于网页的HTML是在服务器端生成的,即使浏览器Javascript被禁用,网页也会显示出来。


SSR的缺点

  • 由于Internet连接较低或没有Internet连接,响应性较差,因为每个页面导航都要往返于服务器以接收HTML。
  • 对于动态SSR,随着网络流量的增加,服务器负载也会增加,因为服务器需要为每个请求动态生成HTML。


客户端渲染(CSR)


在客户端呈现(CSR)中,HTML组件通过在浏览器中执行Javascript代码在客户端生成。在这种情况下,当浏览器请求一个网页时,初始服务器请求返回一个最小的HTML文件,作为应用程序容器,主要包含到React/Vue JavaScript包的链接,看起来像这样:


<html><head><title> CSR App </title></head>
<body><div id="app"> </div><script src="../src/index.js"> </script></body></html>


在这种情况下,没有HTML供浏览器解析以生成HTML DOM。相反,浏览器必须完全下载HTML中链接的JS包,然后在浏览器中运行JS包(使用浏览器JS引擎),然后在客户端生成网页HTML DOM。此外,在应用程序中单击导航链接会操作HTML DOM客户端来创建所请求导航的DOM,而不是从服务器请求HTML(这通常是由下载的JS代码中的“路由器”模块处理的,


例如。React-Router Vue-Router)。浏览器通过在浏览器中执行Javascript在客户端生成HTML组件。客户端呈现使用JavaScript来创建DOM,而不是解析HTML来创建DOM。因为对于典型的客户端渲染应用程序,浏览器只接收一个作为应用程序容器的HTML页面,它们有时也被称为单页应用程序(spa)。传统的React(即Create-React-App), Vue应用程序完全是客户端渲染。


CSR的优势


在初始加载后,速度非常快,响应迅速,因为在初始加载后,网站的所有HTML都是在客户端生成的(通过Javascript),无需往返于服务器以获取HTML。此外,任何实时数据获取都可以通过客户端Javascript代码进行外部API调用来处理。


CSR的缺点


  • 初始加载时间较长,浏览器必须等待整个Javascript包下载并在客户端执行,然后才进行初始呈现。在此期间,用户盯着一个空白的网页。代码分割或惰性加载策略可以用来减少浏览器在初始页面渲染时需要下载的资源数量,这可以极大地提高大型捆绑包应用的TTI(交互时间)。

- - https://ssr.vuejs.org/guide/routing.html#routing-with-vue-router

  • 对SEO和页面排名的负面影响,由于CSR网页大部分是空的,只包含生成HTML的JS代码的链接,网络爬虫可能会将其视为空页面。谷歌网络爬虫可以触发网站的JS HTML渲染,但如果JS包很大,它可能会显示一个“加载”页面,网络爬虫可能无法正确读取页面,因此无法索引它。如果浏览器Javascript被禁用,用户将看到一个空白页面。
  • 如果用户在他们的浏览器上禁用了Javascript, JS包将永远不会在客户端运行,因此HTML将永远不会生成,网页将永远不会呈现。在这种情况下,用户将永远不会看到网站,只是继续看到一个空白页面。
相关文章
|
2月前
|
消息中间件 运维 网络协议
客户端和服务器之间的通信
客户端和服务器之间的通信
34 0
|
1月前
|
JavaScript 搜索推荐 UED
描述 Vue 的服务器端渲染(SSR)。
描述 Vue 的服务器端渲染(SSR)。
23 3
|
21天前
|
网络协议 Python
pythonTCP客户端编程连接服务器
【4月更文挑战第6天】本教程介绍了TCP客户端如何连接服务器,包括指定服务器IP和端口、发送连接请求、处理异常、进行数据传输及关闭连接。在Python中,使用`socket`模块创建Socket对象,然后通过`connect()`方法尝试连接服务器 `(server_ip, server_port)`。成功连接后,利用`send()`和`recv()`进行数据交互,记得在通信完成后调用`close()`关闭连接,确保资源释放和程序稳定性。
|
2天前
|
数据采集 资源调度 前端开发
React的服务器端渲染:使用ReactDOMServer进行高效页面预渲染
【4月更文挑战第25天】使用ReactDOMServer,React支持服务器端渲染以实现高效预渲染。通过在Node.js环境中将React组件转化为HTML字符串,减少客户端JavaScript负载和渲染时间。优点包括更快首屏加载、改善SEO和兼容无JavaScript环境,但也会增加服务器负载、复杂性和状态管理挑战。开发者需根据项目需求平衡SSR和CSR。
|
9天前
|
JavaScript 前端开发 UED
Vue工具和生态系统: Vue.js和服务器端渲染(SSR)有关系吗?请解释。
Vue.js是一个渐进式JavaScript框架,常用于开发单页面应用,但其首屏加载较慢影响用户体验和SEO。为解决此问题,Vue.js支持服务器端渲染(SSR),在服务器预生成HTML,加快首屏速度。Vue.js的SSR可手动实现或借助如Nuxt.js的第三方库简化流程。Nuxt.js是基于Vue.js的服务器端渲染框架,整合核心库并提供额外功能,帮助构建高效的应用,改善用户体验。
12 0
|
2月前
|
网络协议 Java API
【JavaEE初阶】 TCP服务器与客户端的搭建
【JavaEE初阶】 TCP服务器与客户端的搭建
|
1月前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 弹性计算 数据可视化
要将ECS中的文件直接传输到阿里云网盘与相册(
【2月更文挑战第31天】要将ECS中的文件直接传输到阿里云网盘与相册(
420 4
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
22天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。