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 应用程序更小。研究表明它们有助于增加流量和用户参与度,并降低跳出率,这主要归功于它的离线可用性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言——结构体讲解

目录 一、结构体类型的声明 二、结构体变量的定义和初始化 三、结构体的重命名 四、结构体的自引用 五、结构体内存对齐 六、结构体传参 七、结构体实现位段 7.1 什么是位段 7.2 位段的声明和使用 7.3 位段的空间大小计算 7.4 位段的内存分配 7.5 位段的跨平…

计算机网络-物理层基本概念(接口特性 相关概念)

文章目录 总览物理层接口特性星火模型给出的相关概念解释(仅供参考) 总览 求极限传输速率:奈氏准则,香农定理(背景环境不一样) 编码:数据变成数字信号 调制:数字信号变成模拟信号 信…

Elasticsearch:2023 年 Lucene 领域发生了什么?

作者:来自 Elastic Adrien Grand 2023 年刚刚结束,又是 Apache Lucene 开发活跃的一年。 让我们花点时间回顾一下去年的亮点。 社区 2023 年,有: 5 个次要版本(9.5、9.6、9.7、9.8 和 9.9),1 …

51单片机LED点阵屏

LED点阵屏 LED点阵屏是一种由许多小型LED灯组成的矩阵式显示屏。这些LED灯可以是单色、双色或全彩的,它们排列成行和列的网格,可以根据需要点亮来显示图像、文字或动画等内容。LED点阵屏广泛应用于户外广告牌、室内显示、交通信号灯、电子价格标签和其他…

【设计模式】字节三面:请举例阐释访问者模式

今天我们要一起探讨的主题是一种设计模式——访问者模式(Visitor Pattern)。我将从最基础的概念、应用场景,再到实例代码的展示,全方位的为大家剖析访问者模式。而且,我保证,你即使是编程新手,也能理解并开始应用这个设…

如何在 Ubuntu 22.04 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 22.04 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈 介绍 “LAMP”堆栈是一组开源软件&#…

uniapp 在static/index.html中添加全局样式

前言 略 在static/index.html中添加全局样式 <style>div {background-color: #ccc;} </style>static/index.html源码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-…

HCIA——21C/S、P2P、peer的选择

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

安全通信网络

1.网络架构 1&#xff09;应保证网络设备的业务处理能力满足业务高峰期需要。 设备CPU和内存使用率的峰值不大于设备处理能力的70%。 在有监控环境的条件下&#xff0c;应通过监控平台查看主要设备在业务高峰期的资源&#xff08;CPU、内存等&#xff09;使用 情况&#xff…

ES已有mapping下,新增字段且设置初始值

开发过程中随着业务的发展&#xff0c;内容累计&#xff0c;中途需要添加新的字段&#xff0c;并且设置初始值。 # 先查询原来的mapping GET test_index/_mapping # 新增字段 PUT test_index/_mapping {"properties": {"name": {"type": "…

【笔记】Disable APN 禁用数据连接的逻辑(Android KaiOS)

简介 通过OTA/OMADM 运营商服务器可以下发消息实现disable APN&#xff0c;从而影响Data PDN建立。APN被disable了会导致无法正常上网。 在Android 和 KaiOS 系统实现上有区别&#xff0c;不过都是通过carrier_enabled 这类字段实现判断控制。 Android&#xff1a;上层 Tele…

【Emotion】 自动驾驶最近面试总结与反思

outline 写在前面面试问题回顾和答案展望 写在前面 最近由于公司部门即将撤销&#xff0c;开始了新一轮准备。 发现现在整体行情不太乐观&#xff0c;很看过去的尤其是量产的经验 同时本次面试我coding环节答得不好&#xff0c;&#xff08;其实也是半年前大家问的比较简单…

fbx格式转换

目录 fbx转bvh bvh转fbx npz转换为fbx npz转换为fbx代码&#xff1a; convert2fbx.py fbx转bvh https://github.com/SinMDM/SinMDM/blob/0296efba20ae5875b6f1c092d277ea274e8ceda2/utils/fbx2bvh.py """ This code is a variation of https://github.co…

docker运行redis,jdk,nginx

Redis 1.查询redis [rootlocalhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open source key-value store that… 12620 …

Vue关于router-link的使用和部分代码

//使用router-link和a标签差不多&#xff0c;重点是在vue-router中需要在对应的js文件中createRouter里面配置path的路径和createWebHistory&#xff08;createWebhashHistory&#xff09;的导入 //main.js中需要use(router),就可以进行路径的使用&#xff0c;下面是简单的写法…

白话编程--数据篇(1)基本数据类型

前言 数据是程序的另一个重要组成部分.对于程序的两个理解,一是在实现逻辑;二是在处理数据.综合起来,程序以处理数据的方式表达逻辑. 引入 什么是数据?数据的概念是相当广泛的.他相当于客观世界中的"物体".用一个桔子来做类比,我们可以把桔皮,桔梗,桔的汁液,桔的籽…

快速找到文件夹中匹配和不匹配的图片文件

一、脚本简介 在日常的软件开发和数据处理中&#xff0c;经常需要处理大量的文件和数据。针对一些分类的模型结果&#xff0c;这个脚本可以帮助快速找到文件夹中匹配和不匹配的图片文件。 二、完整代码 import osdef find_mismatched_images(folder1, folder2, subfolder):#…

04 双向链表

目录 1.双向链表 2.实现 3.OJ题 4.链表和顺序表对比 1. 双向链表 前面写了单向链表&#xff0c;复习一下 无头单向非循环链表&#xff1a;结构简单&#xff0c;一般不会单独用来存数据。实际中更多作为其他数据结构的子结构&#xff0c;如哈希桶、图的邻接等。另外这种结构在…

windows用mingw(g++)编译opencv,opencv_contrib,并install安装

windows下用mingw编译opencv貌似不支持cuda&#xff0c;选cuda会报错&#xff0c;我无法解决&#xff0c;所以没选cuda&#xff0c;下面两种编译方式支持。 如要用msvc编译opencv&#xff0c;参考我另外一篇文章 https://blog.csdn.net/weixin_44733606/article/details/1357…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…