SPA vs MPA vs PWA

2024-01-23 10:12
文章标签 vs mpa spa pwa

本文主要是介绍SPA vs MPA vs PWA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、单页面应用程序(SPA)

① 什么是 SPA 

SPA 全称为 Single-Page Application,表示单页面应用程序

也就是说只有一个 HTML 文件的 Web 应用,我们通过 Vue 开发的项目其实就是典型的 SPA应用

在单页面应用程序中,我们不会为每个路径创建多个 HTML 文件,而是使用 JavaScript 为同一页面上的不同路径呈现不同的组件

当从浏览器请求单页面应用程序时,就会下载一个 bundle.js 文件,该文件包含所有请求网站的已编译 JavaScript 代码。使用这种方法,浏览器会通过使用 HTML5 History API 根据用户选择的路径呈现单个页面。 

如果网站使用了延迟加载,那么可能会有多有 bundle.js 文件会根据请求的路径进行下载。

因此,除了特殊情况,否则不会重新加载页面(再次从服务器请求)。如果想维护应用程序的状态,这一点是非常重要的,因为重新刷新页面就会重置应用程序的状态。 

SPA的特点:

1) SPA 应用只有一个 HTML 文件,所有的内容其实都在这个页面中呈现的;
2) SPA 应用只会加载一次HTML文件, 不会因为用户的操作而进行页面的重新加载;当用户与应用程序交互时,是通过动态更新页面内容的方式来呈现不同的内容

 

 

② SPA 的优点
  • 提高页面加载速度,从而获得更好的用户体验

它们通常只加载一次。加载后,页面渲染取决于浏览器的速度。

不会重新加载整个网页, 只是局部更新。

  • 更少的服务器负载

渲染逻辑在浏览器中执行。服务器和客户端之间只发送相关数据。

只用处理数据不用处理界面。

  • 缓存:

只向服务器发送一次请求,返回的响应会被缓存,也可以离线使用SPA。

  • 调试:

React 和 Vue 等 SPA 框架提供了调试工具,这使开发人员的开发调试更加轻松。

  • 代码可重用性:

开发人员可以重用代码,这使得开发效率更高。

  • 转场动画:

容易实现。

  • 页面间数据传递

因为在一个页面内,多以页面之间数据传递很容易

 

③ SPA 的缺点
  • 搜索引擎优化 (SEO) 较差:

搜索引擎具有可以解析 JavaScript 的爬虫,但它们很难爬取异步内容。加载初始页面后,不知道还有其他数据的爬虫将停止爬取,从而导致 SEO 效率低。

  • 内存泄漏:

事件监听器占用大量空间。使用 SPA 在客户端很容易引入内存泄漏,如果将事件侦听器添加到全局对象,而没有在卸载组件时删除它们,就会产生内存泄漏。如果不想导致内存泄漏,则需要清理事件侦听器、定时器等。

  • 安全性:

与 MPA 相比,SPA 更容易受到跨站点脚本攻击(XSS)。

2、多页面应用程序(MPA)

 ① 什么是 MPA

MPA 全称 Multi-Page Application,表示多页面应用程序。多页面应用程序由多个 HTML 文件组成,每当请求页面时就会下载这些文件。

我们在地址栏输入的每个新的 URL 或单击的每个超链接时都会向服务器发送一个新请求,并下载一个新的页面。在这种方法中,服务器完成了较为繁重的工作。

因此,如果用户的网络连接较差,每个页面可能需要很长时间才能加载出来。

② MPA 的优点
  • 搜索引擎优化(SEO)更好:

单页可以只有有限数量的关键字,但多页应用程序可以为多个页面提供相同数量的关键字,这为爬虫提供了更多关于网站的信息.

  • 良好的可扩展性:

可以持续添加功能,不断扩展。但在 SPA 中,随着不断添加功能,bundle.js 将会不断增长,因此要么减少内容,要么进行延迟加载。

  • 内存泄漏很少见:

服务器端很有可能出现内存泄漏,但客户端内存泄漏很少见,因为浏览器将为每个导航链接加载不同的脚本。

 

③ MPA 的缺点
  • 加载速度慢:

它们不断地为每个请求加载新页面(即使 UI 发生了细微的变化,页面也必须重新加载)。如果客户端的网络连接不好或服务器速度慢,加载速度就会下降,最终导致用户体验不佳。

  • 开发效率低:

代码可重用性较低,文件较大,前端与后端的耦合更紧密。这些因素会使开发效率低。

  • 增加服务器负载:

与服务器的每次交互都包含一个需要渲染的 UI 包。

  • 转场动画:

无法实现。

  • 页面间数据传递

依赖 URL、Cookie、或者 localStorage 等,实现麻烦。

3、渐进式应用程序(PWA) 

① 什么是 PWA 

PWA 全称 Progressive Web Apps,表示渐进式应用程序

渐进式应用程序可以在独立的窗口中运行,而不是在浏览器的选项卡中运行。简单的说,它们是一种 web 应用程序,类似于本地应用程序,可以安装在手机、平板电脑或者笔记本电脑上。

下载后,用户可以通过屏幕上的图标访问该应用。这种应用还可以向用户发送推送消息和通知。渐进式应用程序可以是 单页面应用(SPA)也可以是多页面应用(MPA)。

想要申请 PWA 应用,必须满足三个条件:

  1. 安全上下文 (HTTPS): 安全上下文是为用户身份验证和机密性定义的最低标准。PWA 的许多 API 和许多功能(如地理定位)只有在应用程序通过安全网络提供服务时才可用。
  2. Service Worker: Service Worker 是在后台运行并控制浏览器如何处理网络请求和内容缓存的脚本。PWA 通过服务工作者提供离线服务。
  3. 清单文件:这是一个 JSON 文件,用于保存 PWA 所需的应用程序信息,例如应用程序的名称、启动 URL、多种尺寸的图标和主题颜色。

与原生移动应用程序相比,渐进式 Web 应用程序更小。研究表明它们有助于增加流量和用户参与度,并降低跳出率,这主要归功于它的离线可用性。

 

这篇关于SPA vs MPA vs PWA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/636068

相关文章

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

解决服务器VS Code中Jupyter突然崩溃的问题

问题 本来在服务器Anaconda的Python环境里装其他的包,装完了想在Jupyter里写代码验证一下有没有装好,一运行发现Jupyter崩溃了!?报错如下所示 Failed to start the Kernel. ImportError: /home/hujh/anaconda3/envs/mia/lib/python3.12/lib-dynload/_sqlite3.cpython-

VSC++: 括号对称比较

括号的使用规则:大括号,中括号,小括号{[()]};中括号,小括号[()];小括号();大括号、中括号、小括号、中括号、小括号、大括号{[()][()]};大括号,中括号,小括号,小括号{[(())]};大括号,中括号,小括号,小括号{[()()]};小括号不能嵌套,小括号可连续使用。 {[]}、{()}、([])、({})、[{}]、{}、[]、{[}]、[(])都属非法。 char aa[

Apache Kylin VS Apache Doris全方位对比

1 系统架构 1.1 What is Kylin1.2 What is Doris2 数据模型 2.1 Kylin的聚合模型2.2 Doris的聚合模型2.3 Kylin Cuboid VS Doris RollUp2.4 Doris的明细模型3 存储引擎4 数据导入5 查询6 精确去重7 元数据8 高性能9 高可用10 可维护性 10.1 部署10.2 运维10.3 客服11 易用性 11.1

vs环境下C++dll生成和使用

动态库和静态库: 动态库:全名动态链接库,用于将你的函数封装,让别人只能调用,不能看你的实现代码。由引入库和dll组成:引入库包含导出的函数和变量名,dll包含实际的函数和数据,运行时加载访问dll文件。  Windows API中的所有函数都封装在dll里面,最重要的三个: Kernel32.dll:包含管理内存、进程和线程的各个函数。User32.dll:包含用于执行用户界面任务,如窗口和

VS Code与SVN关联

VS Code是一款轻量级的集成开发环境,可通过安装插件与SVN进行关联。以下是将VS Code与SVN关联的步骤: 安装SVN插件:在VS Code中打开Extensions(快捷键:Ctrl+Shift+X),搜索并安装"svn"插件。 安装SVN命令行工具:在计算机上安装SVN命令行工具,确保在命令行中可以运行svn命令。 配置SVN路径:在VS Code中打开用户设置(快捷键:Ct

学习记录-VS踩坑记录

一、安装VS2015后,CMAKE执行错误: CMAKE_C_COMPILER-NOTFOUND" was not found.   CMAKE_CXX_COMPILER-NOTFOUND" was not found.  环境: 1.公司内网,无法上外网; 2.文件加密系统; 3.数字公司杀毒软件; 解决方法: 清理环境,添加USBwifi,安全模式卸载数字软件; 1.设置环

面试题41:和为s的两个数VS和为s的连续正数数列

问题说明: 1.和为s的两个数问题是从一个排序的数组中找出和为s的两个数; 2.原题是找出一个即可,现在全部找出; 3.和为s的连续正数数列是给定一个数找出所有连续正数数列的和为s,例如s为9,(2,3,4)就是其中一组。 (一)和为s的两个数问题 public static int findNumbersWithSum(int[] sorted, int fromIndex, in

vs中使用c#\sqlite数据库开发(1)

开发前: 之前在java开发中使用过sqlite,对它有些印象。在用winform或wpf开发小应用程序时,发现用sqlite数据库也是不错的。就像一个会员管理软件,开发完毕后,可以省去想sqlserver那些复杂的操作。软件安装时,不需要额外的数据库环境。简单、便捷。但对于大并发量、大数据量的开发就不要使用sqlite了。如果你用过h2数据库,可以对比一下两者的优劣。 开发前准备: 1.下