SPA
全称 Single Page Application,单页面应用,它所需的资源(如HTML、CSS和JS等)在一次请求中就加载完成,也就是不需要刷新地动态加载。对于SPA来说,页面的切换就是组件或者视图之间的切换
原理
js监听URL的变化,通过监听变化,动态切换组件,实现无刷新切换页面
优点
页面切换快
因为是通过路由(hash路由、history路由)操作js控制页面显隐,可以减少不需要的重复资源下载,所以切换起来就快
缺点
首屏慢
这个是网上说的,但是现在通过webpack对不同的路由进行code split后,根据路由进行按需加载js文件,也不存在这样的问题
SEO优化差
这个确实,相对于MPA来说,JS资源没有在第一次加载完。或者一次加载完后,JS文件太多都有SEO优化差的情况
MPA
MultiPage Application,指有多个独立页面的应用(多个html页面),每个页面必须重复加载js、css等相关资源。多页面应用跳转,需要整页资源刷新
原理
每一个“路由”对应的都是独立的HTML文件
优点
首屏时间快
其实这个在webpack面前也没有优势了
SEO优化好
这个确实,每一个路由的页面都可以做SEO优化
缺点
页面切换慢
因为每次页面切换都是需要请求加载资源,所以每次都是重新获取资源。会相对较慢
对比
| MPA | SPA | |
|---|---|---|
| 应用构成 | 由多个完整页面构成 | 一个外壳页面和多个页面片段构成 |
| 跳转方式 | 页面之间的跳转是从一个页面跳转到另一个页面 | 页面片段之间的跳转是把一个页面片段删除或隐藏,加载另一个页面片段并显示出来。这是片段之间的模拟跳转,并没有开壳页面 |
| 跳转后公共资源是否重新加载 | 是 | 否 |
| URL模式 | http://xxx/page1.html 和 http://xxx/page2.html | http://xxx/shell.html#page1 和 http://xxx/shell.html#page2 |
| 用户体验 | 页面间切换加载慢,不流畅,用户体验差,特别是在移动设备上 | 页面片段间的切换快,用户体验好,包括在移动设备上 |
| 能否实现转场动画 | 无法实现 | 容易实现(手机app动效) |
| 页面间传递数据 | 依赖URL、cookie或者localstorage,实现麻烦 | 因为在一个页面内,页面间传递数据很容易实现 |
| 搜索引擎优化(SEO) | 可以直接做 | 需要单独方案做,有点麻烦 |
| 特别适用的范围 | 需要对搜索引擎友好的网站 | 对体验要求高的应用,特别是移动应用 |
| 开发难度 | 低一些,框架选择容易,但是页面重复代码多 | 高一些,需要专门的框架来降低这种模式的开发难度 |
| 维护成本 | 相对复杂 | 相对容易 |