SPA 优点,我认为更多是在软件工程方面,SPA 形式可以做到前后端彻底分离,只要制定好 API 规范,那么前后端就可以独立开发,并且一套 API 可以同时供多个「端」使用。同时,SPA 倾向于将更多的业务逻辑移动到前端实现。此外,前端有了更好的模块化工具,可复用组件以 js 库的形式进行复用,更容易维护(相比 MPA,通常复用是由模板系统提供的能力)。此外,利用 webpack 的 loader 机制,可以实现更集约化的模块,例如 Vue 的 Single File Component,将相关的 html、css、js 代码集中在一起管理。

SPA 的缺点,我觉得有几方面:

  • 在刷新网页(或从其他地方跳转过来)时用户体验不佳。由于 SPA 所有的数据都需要通过 API 获取,对于内容型网页,首次打开时,需要先加载 SPA 的代码,启动 SPA 应用,然后再通过 API 获取数据,有时候可能需要获取多种数据,需要多次 API 请求,用户体验并不是很好。(虽然可以用服务端渲染 SSR 技术,但该技术带来的额外成本并不低,包括运维成本,也包括一些代码上的妥协)
  • 全局状态管理,对开发者要求很高。例如现在 vue-app 的启动逻辑,我相信大多数开发者都无法做到了如指掌。例如登录页面会有许多入口,应用内跳转、用户直接打开、微信授权后回跳等等,有些途径过来不需要请求 GetUserinfo,有些途径过来需要,像微信授权回跳这种,不少逻辑原本可以直接在后端做的,也不得不在前端实现一遍。这些因素提高了对前端开发者能力的要求。
  • 单页应用虽然将一些逻辑移动到了前端,但后端的开发成本并没有降低。
  • 对 SEO 不友好。这个其实应该 blame 百度,而不是单页应用技术本身。目前主流搜索引擎应该都对 SPA 很友好,唯独百度不行。

MPA 优点,上述 SPA 的缺点都对应 MPA 的优点,这里不再复述一遍。对于“澄清”一些大家可能会觉得是 MPA 缺点的方面:

  • 许多开发者可能对于页面内的交互操作的印象都是 jQuery,不支持数据双向绑定(或者很麻烦),代码笨重。但实际上单页应用也可以使用Vue、React等工具来“接管”页面内的一些组件,甚至整个页面。
  • 难以搭配 webpack 工具链使用。在网上这方面的 best practice 确实很少。此外,对于哪些东西由 MPA 模板引擎渲染、哪些由 js framework 渲染,这两者如何结合,对于这个边界问题,许多开发者可能难以把握。不过目前我已经有一个逐渐清晰起来的方案,也正是这篇文档中后面要讲的东西。

MPA 缺点,同样,与 SPA 的优点对应。前后端代码没有很好的解耦,前端开发者需要有一定的后端代码阅读和开发能力,在分工开发时如何协调 commit 之间的冲突也是一个比较麻烦的事。

那么,什么情况下适用 SPA、什么情况下适用 MPA?以下是一些“简单粗暴”的建议:

  • 要考虑 SEO 时,用 MPA。我认为 MPA 的附加成本是低于 SSR 的。
  • 对于入口比较多的页面(比如登录页面、扫码进入的页面等),使用 MPA。必要时 MPA 和 SPA 可以混合使用,即部分页面使用 MPA,其他页面使用 SPA。
  • 类似 网页 形式的应用,使用 SPA。
  • 移动应用(不含小程序),鼓励使用 MPA。

SPA、MPA 的优缺点相关推荐

  1. 详说SPA(单页应用)和MPA(多页应用)

    一. 什么是SPA? SPA(single-page application),翻译过来就是单页应用. SPA是一种特殊的web应用.将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相 ...

  2. SPA和MPA的区别

    单页面与多页面的区别 (1)单页应用(SinglePage Application , SPA) 指只有一个主页面的应用,一开始只需要加载一次js,css等相关资源.所有的内容都包含在主页面,对每一个 ...

  3. 【SPA】SPA单页面应用详解

    一.什么是SPA 单页应用SPA是一种网络应用程序或网站的模型,它通过动态重写当前页面来与用户交互. 这种方法避免了页面之间切换打断用户体验在单页面应用中,所有必要的代码(HTML.JavaScrip ...

  4. 前端面试题——Vue 高频

    目录 一.Vue的基本原理 二.双向数据绑定的原理 三.MVVM.MVC.MVP的区别 四.Computed 和 Watch 的区别 五.Computed 和 Methods 的区别 六.v-if 和 ...

  5. 【前端路由原理--原生JS实现方式】--前后端路由的区别、关于单页面应用与多页面应用、什么是CSR、SSR、SSG、ISP

    前言 本来只是想学习 React-Router v6 ,没有想到,带出了这么多东西.前后端路由有什么区别?SPA与MPA的是什么?在了解到前端路之后又发现单页面于应用与多页面应用的不同之处,以及 .n ...

  6. react 前端解析二进制流_一年半前端跳槽面试经验(头条、微信、shopee)

    在2019年末的时候,突然想搞点大事,思来想去,感觉只有跳槽是最刺激的. 由于我比较懒,不想换城市,所以这次只面试了头条.微信和 shopee.十分幸运,都拿到了 offer.接下来就简单的说下大家关 ...

  7. 前端路由跳转丢失端口号_如何在应用架构中设计微前端方案 icestark

    文末福利:淘系前端团队 618 实践小册 微前端在 2016 年 ThoughtWorks 的一个技术雷达上面提出后,不断有团队尝试将单体的前端 web 应用按不同维度进行拆分或者组合,再聚合到一个整 ...

  8. 2021届前端面试知识点(其他)

    2021届前端面试知识点(其他) 1. 什么是"前端工程化"? 2. xss跨站脚本攻击原理?如何进行?防御手段? 3. CSRF跨站请求伪造原理?如何进行?防御手段? 4. Sq ...

  9. 单页应用 多页应用的区别

    前言 最近看到一些人在问单页面和多页面应用的区别.所以也就输出这一篇短文希望可以给你一个整体的认识. 这里也会大体介绍单页应用实现的核心 -- 前端路由. 单页应用 VS 多页应用 对比图 单页应用( ...

最新文章

  1. 啥是指标陷阱?很多就出现在你的身边!
  2. Linux下Rsync+Inotify-tools实现数据实时同步
  3. 中断服务子程序(ISR)
  4. matlab摆线等时性程序,摆的等时性实验报告.doc
  5. 关于lombok插件的使用,强大的简化代码工具
  6. 知识图谱中的关系方向与强度研究
  7. hbase 导入到es_HBase 实现数据同步 ElasticSearch
  8. 最快15分钟,完成高精度AI模型定制开发
  9. 如何做一名出色的屌丝码农?
  10. centos ifconfig命令找不到_测试需要掌握docker的一些基本命令
  11. 2016.2.23_导入maven工程遇见的问题【问题】
  12. 计算机右键管理没有管理员权限,鼠标右键为何没有获得管理员权限
  13. GPS从入门到放弃(十六)--- 卫星时钟误差和卫星星历误差
  14. 最短路算法——Dijkstra
  15. “客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 CD-ROM,这可能会导致客户机...” 报错解决办法
  16. 【转】常用的版本控制软件
  17. 基于Ubuntu20.04运行OP-TEE_3.17.0_QEMU_V8的环境搭建
  18. CSS遮罩——如何在CSS中使用遮罩
  19. World Locking Tools for Unity (五)安装部分
  20. 读书笔记:redis开发与运维 基础篇

热门文章

  1. php逐个汉字遍历字符串
  2. solidity的函数修改器(modifier)
  3. 求解袋鼠过河问题(dp)
  4. 十年架构师留下最完整的Java学习路线,学完年薪40W
  5. Final发布 文案+美工展示
  6. 手机短号码(mobile)C++
  7. 【2020-11-26】不扣JS系列之某医保服务平台数据获取
  8. 【ELMAN预测】基于粒子群算法改进ELMAN动态递归神经网络实现数据预测matlab源码
  9. laravel维护模式 MaintenanceMode
  10. VC++下载图片然后控件显示JPG图片的实现