单页面 Web 应用(Single Page Application,SPA)的工作原理介绍

简介: 单页面 Web 应用(Single Page Application,SPA)的工作原理介绍

SPA 无处不在,但在网络开发人员中仍然是一个颇有争议的话题。


自 2003 年左右首次出现以来,单页 Web 应用程序已经取得了长足的进步。它们已成为现代 javascript 领域不可或缺的一部分。


但是在我与不少开发人员的讨论中,我觉得单页应用程序的实际工作方式仍然不够清晰。 因此,我决定卷起袖子(形象地说)并提供我对这个非常有趣的主题的看法。


所以,让我们从头开始。


what are single page applications?

在我看来,最好的定义是:单页应用程序是一种 Web 应用程序,它只需要将单个页面加载到浏览器中。


你可能会想,这到底是什么意思? 一个只有单页的应用程序怎么可能对世界上的任何人有用?


答案很简单。 单页 Web 应用程序是围绕动态重写该单页内容的概念构建的。 这与从服务器加载预渲染页面不同。


这就是魔法发生的地方。 通过采用这种方式,单页面 Web 应用程序避免了由于在服务器上呈现页面而导致的中断。 这消除了 Web 开发世界在提供无缝用户体验方面通常面临的最大问题。


单页面应用的工作原理

在单页 Web 应用程序中,当浏览器向服务器发出第一个请求时,服务器会发回 index.html 文件。基本上就是这样。那是提供 html 文件的唯一时间。 html 文件有一个 .js 文件的脚本标记,它将控制 index.html 页面。所有后续调用仅返回数据,通常为 json 格式。应用程序使用此 json 数据动态更新页面。但是,页面永远不会重新加载。


一旦应用程序启动,客户端(而不是服务器)处理将数据转换为 html 的工作。基本上,大多数现代 spa 框架都有一个在浏览器中运行的模板引擎来生成 html。


将此与传统的 Web 应用程序形成对比。在传统应用中,每次应用调用服务器时,服务器都会渲染整个html页面。客户端接收呈现的页面并触发页面刷新。在这种情况下,浏览器是客户端。


下图解释了两种方法之间的区别:


image.png


单页面应用的优势

很明显,由于我们不会为每个用户交互通过网络发送任何 html,因此可以节省大量时间和带宽。由于各种开始和结束标签,html 版本通常更大。此外,在传统方法中,每次向服务器发出请求时,我们也会加载大量重复的 html。通过遵循 spa 方法,应用程序变得更加敏感。


无需猜测,更快的数据刷新和更少的带宽消耗会带来更好的用户体验。这在移动设备和较慢的互联网连接上非常有用。


有一些反对单页 Web 应用程序的论据说,javascript 包的大小可能会变得臃肿。然而,大多数优秀的 spa 框架都提供了很好的代码拆分方法。这可以控制您的包大小并在适用的情况下执行按需加载。


一个不太明显的好处是关于单页面应用的整体架构。使用 json 发送应用程序数据在视图层 (html) 和应用程序层之间创建了一种分离。这将表示层和应用层解耦,并允许开发人员独立发展每一层。您可以在不更改应用程序逻辑的情况下替换 html 标记。客户端和服务器也是完全独立的。


另一个被忽视的好处是单页应用程序的生产部署。单页面应用非常容易部署。当您构建用于生产的 spa 时,您通常会得到一个 html 文件、一个 css 包和一个 javascript 包。任何静态内容服务器都可以托管这些文件。很好的例子是 nginx、amazon s3 bucket、apache 或 firebase。


单页面应用的缺点

单页 Web 应用程序的最大缺点之一是它们无法被像谷歌这样的搜索引擎正确索引。 由于除了初始 index.html 文件之外没有 html 标记,搜索引擎无法索引内容,因为它们的爬虫无法执行用于生成 html 的 javascript。


然而,在官方公告中,谷歌表示他们的搜索引擎现在能够抓取 ajax 调用。


相关文章
|
17天前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
33 1
|
7天前
|
安全 关系型数据库 Shell
Web安全-浅析CSV注入漏洞的原理及利用
Web安全-浅析CSV注入漏洞的原理及利用
11 3
|
7天前
|
Web App开发 JavaScript 前端开发
构建高效Web应用:Node.js与Express框架的深度整合
【9月更文挑战第28天】在现代Web开发领域,Node.js和Express框架的结合已成为打造高性能、易扩展应用的黄金组合。本文将深入探讨如何利用这一技术栈优化Web应用架构,提供具体实践指导,并分析其性能提升的内在机制。通过代码示例,我们将展示从基础搭建到高级功能的实现过程,旨在为开发者提供一条清晰的学习路径,以实现技术升级和项目效率的双重提升。
20 3
ly~
|
9天前
|
存储 监控 小程序
除了 Web 开发,PHP 还可以应用于哪些领域?
PHP 在 Web 开发之外还有多个应用场景:1)命令行脚本,如批量处理文件、数据库管理及系统监控;2)利用 PHP-GTK 等工具开发桌面应用,满足特定业务需求;3)结合微信云开发功能支持微信小程序后端,处理数据存储与用户认证;4)为小型游戏或特定类型游戏开发游戏服务器逻辑;5)在物联网领域作为后端语言处理设备数据交互与分析。
ly~
25 4
|
9天前
|
JavaScript 前端开发 UED
WebSocket在Python Web开发中的革新应用:解锁实时通信的新可能
在快速发展的Web应用领域中,实时通信已成为许多现代应用不可或缺的功能。传统的HTTP请求/响应模式在处理实时数据时显得力不从心,而WebSocket技术的出现,为Python Web开发带来了革命性的变化,它允许服务器与客户端之间建立持久的连接,从而实现了数据的即时传输与交换。本文将通过问题解答的形式,深入探讨WebSocket在Python Web开发中的革新应用及其实现方法。
23 3
|
9天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
12 1
|
13天前
|
中间件 API 开发者
深入理解Python Web框架:中间件的工作原理与应用策略
在Python Web开发中,中间件位于请求处理的关键位置,提供强大的扩展能力。本文通过问答形式,探讨中间件的工作原理、应用场景及实践策略,并以Flask和Django为例展示具体实现。中间件可以在请求到达视图前或响应返回后执行代码,实现日志记录、权限验证等功能。Flask通过装饰器模拟中间件行为,而Django则提供官方中间件系统,允许在不同阶段扩展功能。合理制定中间件策略能显著提升应用的灵活性和可扩展性。
15 4
|
23天前
|
存储
在 Web 中判断页面是不是刷新
【9月更文挑战第10天】在Web开发中,判断页面是否刷新有多种方法:1) 监听`popstate`事件,检测用户是否通过历史记录访问页面;2) 记录并比较页面加载时间戳,若相差极小,则可能为刷新;3) 利用本地存储设置特定值,若该值不存在或不符合预期,则页面可能被刷新。然而,这些方法并非绝对准确。
|
23天前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
|
1月前
|
前端开发 安全 JavaScript
构建高效Web应用:前后端分离架构的实践
【9月更文挑战第4天】在数字时代,Web应用已成为企业与用户互动的主要平台。本文将介绍如何通过前后端分离的架构设计来构建高效的Web应用,探讨该架构的优势,并分享实现过程中的关键步骤和注意事项。文章旨在为开发者提供一种清晰、高效的开发模式,帮助其在快速变化的市场环境中保持竞争力。
下一篇
无影云桌面