Web 应用客户端渲染和服务器端渲染的比较

简介: Web 应用客户端渲染和服务器端渲染的比较

原文链接


The Web Page Rendering Dilemma

关于网页渲染的讨论是最近几年才出现的。早些时候,网站和网络应用程序有一个共同的策略要遵循。他们准备了要发送到服务器端浏览器的 HTML 内容;然后在浏览器中将该内容呈现为带有 CSS 样式的 HTML。


JavaScript 框架采用了一种完全不同的 Web 开发方法。 JavaScript 框架带来了减轻服务器负担的可能性。


借助 JavaScript 框架的强大功能,可以通过仅请求所需的内容来直接从浏览器呈现动态内容。在这种情况下,服务器只提供必要的基本 HTML 包装器。这种转换为访问者提供了无缝的用户体验,因为加载网页所需的时间很少。此外,一旦加载,网页就不会再次重新加载。


在本文中,我们将讨论这些技术上不同的网页渲染方法。 我将解释每种方法之间的主要区别,并为您建议一种方法。


服务器端渲染

服务器端渲染或 SSR 是在浏览器上渲染网页的传统方式。 如上所述,呈现动态网页内容的传统方式遵循以下步骤:


用户向网站发送请求(通常通过浏览器)

服务器在遍历页面内的服务器端脚本后检查资源、编译和准备 HTML 内容。

这个编译后的 HTML 被发送到客户端的浏览器以进行进一步的渲染和显示。

浏览器下载 HTML 并使网站对最终用户可见

浏览器然后下载 Javascript (JS) 并在执行 JS 时使页面具有交互性

image.png注意,在服务器端渲染的第二个步骤,客户可以浏览从服务器发送过来的静态页面,但是无法互动,因为 JavaScript 尚未下载到客户端。


在这个过程中,获取动态内容、将其转换为 HTML 并将其发送到浏览器的所有负担都在服务器上。 因此,此过程称为服务器端渲染 (SSR)。提前渲染完整 HTML 的责任伴随着服务器的内存和处理能力的负担。 与没有动态内容要呈现的静态站点的页面加载时间相比,这会增加页面加载时间。


客户端渲染

客户端呈现或 CSR 是处理网页以在浏览器中显示的不同方法。在 CSR 中,编译动态内容并为它们生成 HTML 的负担转移到客户端的浏览器。


这种方法由 JavaScript 框架和 ReactJS、VueJS 和 Angular 等库提供支持。 客户端渲染场景的正常网页渲染流程遵循以下步骤:


用户向网站发送请求(通常通过浏览器)。


可以使用 CDN(内容交付网络)代替服务器来为用户提供静态 HTML、CSS 和支持文件。


浏览器先下载 HTML,然后再下载 JS。 同时,用户会看到一个加载符号。


浏览器获取 JS 后,通过 AJAX 发出 API 请求以获取动态内容并对其进行处理以呈现最终内容。


服务器响应后,在客户端浏览器中使用 DOM 处理呈现最终内容。

image.png在 CSR 渲染的第三步,用户只能看到一个空白的屏幕。


由于此过程涉及在客户端获取和处理数据,因此该过程称为客户端渲染。


两种渲染模式的对比

由于这两种方法处理内容的方式不同,因此每种方法都有其优点。让我们从用户和 Web 的角度比较 CSR 与 SSR。


web page 加载时间

网页加载时间是从请求被发送到服务器到它在浏览器上呈现之间所花费的时间。 当涉及到您的网站或 Web 应用程序的用户体验 (UX) 时,这是一个重要方面。 CSR 和 SSR 的网页加载时间在两种情况下是不同的:


首页加载时间

第一页加载时间是用户第一次加载您的网站所用的平均时间。 在首次加载时,在 CSR 中,浏览器一次加载基本 HTML、CSS 和所有所需的脚本,然后将 HTML 编译为浏览器上可用的内容。


这一次通常不仅仅是从服务器获取预编译的 HTML 和相应的脚本。因此,当涉及到第一页加载时间时,SSR 通常需要更少的时间。


接下来页面的加载时间

第二个页面加载时间是从一个页面导航到另一个页面所花费的平均时间。 在这种情况下,由于 CSR 的所有支持脚本都是提前加载的,因此 CSR 的加载时间更快。 除非需要加载惰性 JavaScript 模块,否则它不会向服务器发送请求。


但是,对于 SSR,在第一页加载中遵循的完整请求周期是重复的。 这意味着 SSR 对网页加载时间几乎没有任何影响。 因此,在这种情况下,CSR 响应更快。


这里需要注意的是,上述推论并未深入考虑网络方面。 我们相信客户端和服务器在网络上具有相当的带宽。


对缓存的影响

为了加速繁重的 web 应用程序,每个浏览器和 web 服务器都采用缓存机制来缓存客户端机器上的可重用脚本。 这改善了 CSR 和 SSR 的加载时间。 然而,CSR 有一个主要的好处。


在 CSR 中,只要不需要延迟加载模块,基于 CSR 的 Web 应用程序也可以在没有互联网的情况下运行(除非您调用数据 API)。 加载后,应用程序不再需要向服务器发送请求。这允许浏览 Web 应用程序,就像一个简单的桌面应用程序。


然而,在 SSR 中,总是向服务器发送请求。 因此,与 CSR 相比,SSR 的页面加载时间无疑更长。缓存确实提高了 SSR 的内容渲染速度,因为浏览器需要从缓存中检索必要的脚本。下图描述了浏览器如何处理对缓存脚本的重复请求:

image.png请注意,大多数脚本是从内存或磁盘加载的。 这大大缩短了加载时间并防止了服务器上的过度负载。


如何选择合适的渲染方案

Dynamic Content Loading

服务器通常驻留在具有更高计算能力和显着更高网络速度的机器上。 凭借这种速度和能力,它在处理预期数量的处理请求时永远不会耗尽资源。 结果,在服务器上获取内容变得相对更快。


另一方面,客户端计算机的计算能力有限,在客户端获取和呈现动态内容可能需要更长的时间。 这意味着获取呈现的内容所消耗的总时间会更长。 因此,如果您的网站涉及重复的动态内容呈现,SSR 是比 CSR 更好的选择。


Web Application UX vs Website UX

尽管它们看起来几乎相同,但 Web 应用程序和网站是两种不同的 Web 内容格式。 Web 应用程序是一个完整的应用程序,可用于会计、CRM、人力资源管理、项目管理等目的。另一方面,网站提供信息内容。


与网站相比,Web 应用程序涉及更多的用户交互。 在用户交互较高的场景中,确保用户交互不会花费很长时间是至关重要的。 因此,与 SSR 相比,CSR 更适用于 Web 应用程序。


另一方面,对于网站,如果每次点击都加载新网页,对于客户来说也能接受,因为缓存通常会负责加速渲染。 此外,SSR 还确保为爬虫提供正确的元数据——与 CSR 相比,这使得 SSR 更适合网站。


结论

CSR 和 SSR 对于您计划提供给用户的 UX 至关重要。 我希望本文能帮助您从功能和实用的角度理解这些概念。 最终的选择最终是你的。 考虑到上述因素,明智地选择。 错误的选择可能会让您重新开发整个网站或 Web 应用程序。 正确的选择可能会减少您将来的代码管理工作。


相关文章
|
16天前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
33 1
|
5天前
|
Web App开发 JavaScript 前端开发
构建高效Web应用:Node.js与Express框架的深度整合
【9月更文挑战第28天】在现代Web开发领域,Node.js和Express框架的结合已成为打造高性能、易扩展应用的黄金组合。本文将深入探讨如何利用这一技术栈优化Web应用架构,提供具体实践指导,并分析其性能提升的内在机制。通过代码示例,我们将展示从基础搭建到高级功能的实现过程,旨在为开发者提供一条清晰的学习路径,以实现技术升级和项目效率的双重提升。
17 3
ly~
|
7天前
|
存储 监控 小程序
除了 Web 开发,PHP 还可以应用于哪些领域?
PHP 在 Web 开发之外还有多个应用场景:1)命令行脚本,如批量处理文件、数据库管理及系统监控;2)利用 PHP-GTK 等工具开发桌面应用,满足特定业务需求;3)结合微信云开发功能支持微信小程序后端,处理数据存储与用户认证;4)为小型游戏或特定类型游戏开发游戏服务器逻辑;5)在物联网领域作为后端语言处理设备数据交互与分析。
ly~
21 4
|
8天前
|
JavaScript 前端开发 UED
WebSocket在Python Web开发中的革新应用:解锁实时通信的新可能
在快速发展的Web应用领域中,实时通信已成为许多现代应用不可或缺的功能。传统的HTTP请求/响应模式在处理实时数据时显得力不从心,而WebSocket技术的出现,为Python Web开发带来了革命性的变化,它允许服务器与客户端之间建立持久的连接,从而实现了数据的即时传输与交换。本文将通过问题解答的形式,深入探讨WebSocket在Python Web开发中的革新应用及其实现方法。
22 3
|
7天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
12 1
|
11天前
|
中间件 API 开发者
深入理解Python Web框架:中间件的工作原理与应用策略
在Python Web开发中,中间件位于请求处理的关键位置,提供强大的扩展能力。本文通过问答形式,探讨中间件的工作原理、应用场景及实践策略,并以Flask和Django为例展示具体实现。中间件可以在请求到达视图前或响应返回后执行代码,实现日志记录、权限验证等功能。Flask通过装饰器模拟中间件行为,而Django则提供官方中间件系统,允许在不同阶段扩展功能。合理制定中间件策略能显著提升应用的灵活性和可扩展性。
15 4
|
21天前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
|
27天前
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
103 3
|
29天前
|
前端开发 安全 JavaScript
构建高效Web应用:前后端分离架构的实践
【9月更文挑战第4天】在数字时代,Web应用已成为企业与用户互动的主要平台。本文将介绍如何通过前后端分离的架构设计来构建高效的Web应用,探讨该架构的优势,并分享实现过程中的关键步骤和注意事项。文章旨在为开发者提供一种清晰、高效的开发模式,帮助其在快速变化的市场环境中保持竞争力。
|
1月前
|
中间件 编译器 数据处理
在web开发中应用管道过滤器
【9月更文挑战第1天】本文介绍管道-过滤器架构将数据处理流程分解为一系列独立组件,通过管道连接,适用于数据流处理如图像处理、编译器设计等。通过具体实例说明了Gin如何有效支持管道-过滤器风格的设计,构建高性能Web服务。
40 9
下一篇
无影云桌面