SPA和MPA比较

261 阅读3分钟

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优化

缺点
页面切换慢

因为每次页面切换都是需要请求加载资源,所以每次都是重新获取资源。会相对较慢

对比

MPASPA
应用构成多个完整页面构成一个外壳页面和多个页面片段构成
跳转方式页面之间的跳转是从一个页面跳转到另一个页面页面片段之间的跳转是把一个页面片段删除或隐藏,加载另一个页面片段并显示出来。这是片段之间的模拟跳转,并没有开壳页面
跳转后公共资源是否重新加载
URL模式http://xxx/page1.htmlhttp://xxx/page2.htmlhttp://xxx/shell.html#page1http://xxx/shell.html#page2
用户体验页面间切换加载慢,不流畅,用户体验差,特别是在移动设备上页面片段间的切换快,用户体验好,包括在移动设备上
能否实现转场动画无法实现容易实现(手机app动效)
页面间传递数据依赖URLcookie或者localstorage,实现麻烦因为在一个页面内,页面间传递数据很容易实现
搜索引擎优化(SEO)可以直接做需要单独方案做,有点麻烦
特别适用的范围需要对搜索引擎友好的网站对体验要求高的应用,特别是移动应用
开发难度低一些,框架选择容易,但是页面重复代码多高一些,需要专门的框架来降低这种模式的开发难度
维护成本相对复杂相对容易