【前端】SPA v.s. MPA

article/2025/6/16 3:48:53
  • 链接:页面结构

误区

  • 页面结构管理有两种常见方式:路由形式 和 组件形式。路由形式 对应MPA ,组件形式对应SPA
  1. 误区 1:路由形式 = MPA❌
    路由是 SPA 和 MPA 共有的概念,区别在于路由映射的对象:
    MPA 的路由映射独立 HTML 页面,依赖服务端跳转;
    SPA 的路由映射前端组件 / 视图,依赖前端 JS 动态渲染。
    正确表述:
    MPA 是 “服务端路由 + 多 HTML 页面” 的组合;
    SPA 是 “前端路由 + 单 HTML 页面 + 组件化” 的组合。
  2. 误区 2:组件形式 = SPA❌
    组件化是一种开发模式,与应用是单页还是多页无关。
    MPA 完全可以使用组件化开发(如通过模板引擎复用组件),只是组件的作用范围限于单个页面,跨页面复用需手动处理(如复制粘贴或全局 JS 挂载)。
    正确表述:
    SPA必须依赖组件化来实现高效的局部更新;
    MPA可以选择组件化来提升开发效率,但非强制要求。
    • 总结
      在这里插入图片描述

对比

单页应用 Single Page Application
多页应用 Multi-Page Application

SPAMPA
页面数量1 个主 HTML 页面,通过组件动态渲染内容多个独立 HTML 页面,每个页面独立加载
路由核心前端路由(JS 控制 URL 与组件的映射)服务端路由(服务器返回不同 HTML 文件)
组件化程度强依赖(视图层完全由组件构成)可选(依赖模板引擎或前端框架实现)
交互体验无刷新,局部更新全页刷新,跳转时有延迟
开发模式前端主导(需掌握路由、状态管理等)服务端主导(HTML/CSS/JS 相对独立)
优点用户体验流畅;开发效率高;
资源利用率高;适合移动应用
SEO 友好;首屏加载快;开发简单直接;容错性强;
缺点首屏加载慢;SEO 困难;
技术复杂度高;浏览器兼容性差
用户体验差;资源重复加载;
维护成本高;数据共享困难
应用场景应用需高频交互(如表单、实时数据),且用户使用现代浏览器。
团队熟悉前端工程化(如 Webpack、TypeScript)。
对 SEO 要求不高(如企业内部系统、工具类应用)。
网站以内容展示为主,需良好 SEO(如电商商品页、新闻资讯)。
开发资源有限,需快速上线(如活动页、小型官网)。
目标用户使用老旧浏览器(如 IE9 以下)或网络环境差。
  • 优缺点详细展开
    • SPA
      • 用户体验流畅 :无需刷新页面,通过 AJAX/Fetch 动态加载数据,交互响应速度快,适合高频操作(如表单、实时数据更新)。
      • 开发效率高:组件化开发(如 React/Vue)可复用性强,减少重复代码;前后端分离,团队分工清晰。
      • 资源利用率高:首次加载后,仅需更新变化的组件和数据,减少重复请求(如导航栏、footer 全局复用)。
      • 适合移动应用:可封装为 PWA(渐进式 Web 应用),提供类似原生 APP 的体验(离线支持、推送通知)。
      • 首屏加载慢:需加载完整 JS/CSS 包,若未优化(如代码分割、懒加载),可能导致白屏时间过长。解决方法:使用 SSR/SSG(如 Next.js、Nuxt.js)预渲染关键页面。
      • SEO 困难:内容由 JS 动态渲染,搜索引擎爬虫难以抓取(如 Google Gmail 在爬虫眼中是空白页面)。解决方法:结合 SSR / 预渲染,或使用 Google 的 AJAX 爬取协议。
      • 技术复杂度高:需要掌握前端路由、状态管理(如 Redux)、异步处理等复杂概念,学习曲线陡峭。
      • 浏览器兼容性差:依赖 HTML5 History API 和现代 JS 特性(如 Promise),对 IE 等老旧浏览器支持有限。 解决方法:使用 polyfill(如 ES6-Shim)或降级方案。
    • MPA
      • SEO 友好:每个页面都是完整 HTML,内容直接可见于源代码,搜索引擎可直接抓取(如新闻网站、博客)。
      • 首屏加载快 :按需加载单个页面资源,无需等待整体 JS/CSS 加载,适合网络环境差的场景(如移动端网页)。
      • 开发简单直接 :无需复杂的前端工程化配置,适合小团队或快速原型开发(如使用 PHP+jQuery)。
      • 容错性强:单个页面崩溃不影响其他页面,用户可继续访问其他功能。
      • 用户体验差 :页面跳转时需全页刷新,导致 “闪烁感”,尤其在移动端体验不佳(如传统 MPA 电商的购物车操作)。
      • 资源重复加载 :每个页面都需加载独立的 CSS/JS(如多个页面共用的导航栏组件需重复加载),浪费带宽。
      • 维护成本高 :多页面代码冗余(如每个页面都需维护导航栏逻辑),修改全局样式需逐个页面调整。
      • 数据共享困难: 跨页面数据传递需依赖 Cookie/LocalStorage 或服务端 Session,实现复杂。
  • 总结
    路由形式是 SPA 和 MPA 共有的管理方式,但SPA 的路由管理前端组件,MPA 的路由管理后端页面——前者在一个页面内用组件切换实现导航,后者通过服务器返回不同页面实现导航。

http://www.hkcw.cn/article/wklFvJKkhA.shtml

相关文章

国米0-5创欧冠决赛最大分差 巴黎青春风暴横扫夺冠

在安联球场举行的欧冠决赛中,巴黎圣日耳曼以5比0横扫国际米兰,创造了欧冠决赛历史上的最大分差纪录。此前欧冠决赛的最大分差为四球,最近一次是1993-1994赛季AC米兰对巴萨的4比0。恩里克带领下的巴黎圣日耳曼首次赢得欧冠冠军,他们的表现令人震惊。比赛开始后不久,巴黎便迅…

樊振东加盟德甲 俱乐部披露幕后 签约过程震撼乒坛

FC萨尔布吕肯俱乐部宣布,奥运冠军樊振东将加盟球队。当樊振东在社交媒体上发布观看欧冠的照片时,另一条消息也震惊了乒乓球圈:他将在新赛季代表萨尔布吕肯出战德国乒乓球甲级联赛(TTBL)。俱乐部官方公告中提到,前世界排名第一的樊振东将在新赛季为萨尔布吕肯效力。这位28…

Yunxi期中

Misc 谍影重重plus(misc) 随波逐流修复伪加密 零宽字符解密,???需要爆破 import itertools import stringdef generate_symmetric_passwords():# 扩展字符集:大小写字母 数字 符号chars st…

2024年ESWA SCI1区TOP,自适应学习灰狼算法ALGWO+无线传感器网络覆盖优化,深度解析+性能实测

目录 1.端午快乐2.摘要3.灰狼算法GWO原理4.改进策略5.结果展示6.参考文献7.代码获取8.读者交流 1.端午快乐 今天端午节,祝各位朋友端午安康,阖家平安! 2.摘要 无线传感器网络(WSNs)是一种被广泛应用的新兴技术&…

YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取

文章目录 引言GhostNetv2概述GhostNet回顾GhostNetv2创新 YOLOv8主干网络改进原YOLOv8主干分析GhostNetv2主干替换方案整体架构设计关键模块实现 完整主干网络实现YOLOv8集成与训练模型集成训练技巧 性能对比与分析计算复杂度对比优势分析 部署优化建议结论与展望 引言 目标检…

【Oracle】TCL语言

个人主页:Guiat 归属专栏:Oracle 文章目录 1. TCL概述1.1 什么是TCL?1.2 TCL的核心功能 2. 事务基础概念2.1 事务的ACID特性2.2 事务的生命周期 3. COMMIT语句详解3.1 COMMIT基础语法3.2 自动提交与手动提交3.3 提交性能优化 4. ROLLBACK语句…

设计模式——单例设计模式(创建型)

摘要 本文详细介绍了单例设计模式,包括其定义、结构、实现方法及适用场景。单例模式是一种创建型设计模式,确保一个类只有一个实例并提供全局访问点。其要点包括唯一性、私有构造函数、全局访问点和线程安全。文章还展示了单例设计模式的类图和时序图&a…

STM32F103C8T6,bxCAN收发配置实例,包含ID过滤

文章目录 引言bxCAN简介bxCAN主要特点代码示例引言 bxCAN简介 bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。 对于安全紧要的应…

使用 HTML + JavaScript 实现可拖拽的任务看板系统

本文将介绍如何使用 HTML、CSS 和 JavaScript 创建一个交互式任务看板系统。该系统支持拖拽任务、添加新任务以及动态创建列,适用于任务管理和团队协作场景。 效果演示 页面结构 HTML 部分主要包含三个默认的任务列(待办、进行中、已完成)和…

进程间通信II·命名管道

目录 原理 创建过程 特性 代码练习 客户端与服务端交互 小知识 原理 原理:两个进程各自的struct file 指向相同的inode和文件缓冲区(这里的inode和文件缓冲区也应用了引用计数)。 命名管道创建的是磁盘上的一种不刷新数据到缓冲区的常规…

Redis--缓存工具封装

经过前面的学习,发现缓存中的问题,无论是缓存穿透,缓存雪崩,还是缓存击穿,这些问题的解决方案业务代码逻辑都很复杂,我们也不应该每次都来重写这些逻辑,我们可以将其封装成工具。而在封装的时候…

ZC-OFDM雷达通信一体化减小PAPR——选择性映射法(SLM)

文章目录 前言一、SLM 技术1、简介2、原理 二、MATLAB 仿真1、核心代码2、仿真结果 三、资源自取 前言 在 OFDM 雷达通信一体化系统中,信号的传输由多个子载波协同完成,多个载波信号相互叠加形成最终的发射信号。此叠加过程可能导致信号峰值显著高于其均…

ESP32-idf学习(四)esp32C3驱动lcd

一、前言 屏幕是人机交互的重要媒介,而且现在我们产品升级的趋势越来越高大尚,不少产品都会用lcd来做界面,而esp32c3在一些项目上是可以替代主mcu,所以驱动lcd也是必须学会的啦 我新买的这块st7789,突然发现是带触摸…

Remote Sensing投稿记录(投稿邮箱写错、申请大修延期...)风雨波折投稿路

历时近一个半月,我中啦! RS是中科院二区,2023-2024影响因子4.2,五年影响因子4.9。 投稿前特意查了下预警,发现近五年都不在预警名单中,甚至最新中科院SCI分区(2025年3月)在各小类上…

ZC-OFDM雷达通信一体化减小PAPR——部分传输序列法(PTS)

文章目录 前言一、PTS 技术1、简介2、原理 二、MATLAB 仿真1、核心代码2、仿真结果 三、资源自取 前言 在 OFDM 雷达通信一体化系统中,信号的传输由多个子载波协同完成,多个载波信号相互叠加形成最终的发射信号。此叠加过程可能导致信号峰值显著高于其均…

第6章 放大电路的反馈

本章基本要求 会判:判断电路中有无反馈及反馈的性质 会算:估算深度负反馈条件下的放大倍数 会引:根据需求引入合适的反馈 会判振消振:判断电路是否能稳定工作,会消除自激振荡。 6.1 反馈的概念及判断 一、反馈的…

知识管理五强对比:Baklib高效突围

Baklib核心技术优势 Baklib的底层技术架构以知识中台为核心,深度融合自然语言处理(NLP)与分布式存储技术,实现多源异构数据的统一纳管。其智能分类引擎通过语义理解自动关联碎片化文档,结合动态标签体系与多维度权限控…

电机驱动器辐射骚扰整改

定位低压DC部分的骚扰源(排除法): 为确定是电源哪部分出现问题,可以采取如下步骤进行验证: a.将12V转5V的芯片去掉,仅剩12V器件工作,然后测试; b.将5V转3.3V和隔离5V的芯片去掉&am…

CTFHub-RCE 命令注入-过滤空格

观察源代码 代码里面可以发现过滤了空格 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 我们尝试将空格转义打开这个文件 利用 ${IFS} 127.0.0.1|cat${IFS}flag_195671031713417.php 可是发现 文本内容显示不出来&…

2022年 中国商务年鉴(excel电子表格版)

2022年 中国商务年鉴(excel电子表格版).ziphttps://download.csdn.net/download/2401_84585615/89772883 https://download.csdn.net/download/2401_84585615/89772883 《中国商务年鉴2022》是由商务部国际贸易经济合作研究院主办的年度统计资料&#xf…