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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 服务器端渲染(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将永远不会生成,网页将永远不会呈现。在这种情况下,用户将永远不会看到网站,只是继续看到一个空白页面。
相关文章
|
3月前
|
存储 缓存 前端开发
如何优化 SSR 应用以减少服务器压力
优化SSR应用以减少服务器压力,可采用代码分割、缓存策略、数据预加载、服务端性能优化、使用CDN、SSR与SSG结合、限制并发请求、SSR与CSR平滑切换、优化前端资源及利用框架特性等策略。这些方法能有效提升性能和稳定性,同时保证用户体验。
|
25天前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
51 18
[Git] 深入理解 Git 的客户端与服务器角色
|
2月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
277 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
3月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
64 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
3月前
|
数据采集 前端开发 搜索推荐
|
3月前
|
数据采集 缓存 前端开发
服务器端渲染(SSR)
服务器端渲染(SSR)
|
2天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
3天前
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。
|
6天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
8天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!

热门文章

最新文章