Web开发选择使用SPA还是MPA or Hybrid App?
SPA :Single-Page Application,单一页面应用
MPA:Multiple-Page Application,多页面应用
Hybrid App:半原生半Web的混合类App应用
基于内容优先原则(content first)来思考这个问题,内容是用户决定是否使用应用的原因,因此需要回答两个问题
-
你想展示怎样的内容给用户
-
用户最希望看到怎样的内容
Single-Page Application
单一页面程序在浏览器中运行,在使用期间不需要用户刷新和重新加载资源。Gmail
,Google Maps
,Facebook
,Github
等都是这种架构的应用。使用SPA架构的应用程序致力于优秀的用户体验,因为这种架构不需要刷新,不需要等待,用户似乎在使用本地程序一般自然,它仅仅是一个网页,通过Javascript
加载了所有的内容
优点
-
-
开发更容易,不需要服务端路由来处理,所以很容易开始,甚至可以通过本地打开html的方式使用我们的应用程序。
-
更容易使用Chrome进行调试
-
更容易制作手机应用程序,因为可以重用大量的代码
-
更高效的使用缓存,一次加载全部的资源,甚至可以离线使用
缺点
-
很难做SEO优化,这曾经是个难点,但是目前可以使用服务端渲染来处理这个问题。
-
首次加载缓慢,因为首次加载时需要加载全部的资源。
-
相比较传统网页应用,更容易被跨站脚本攻击
-
Javascript
的内存弱点有可能使高配电脑也变得卡顿
Multiple-Page Application
多页面程序是我们所知道多更传统的方式,每次请求都会返回一部分页面用于展示,一般有更多的层次,也更为复杂。因为Ajax
技术的存在,我们可以局部刷新,一定程度上降低了网络负载,但是相对SPA结构的应用,在开发上会更复杂一些。
优点
-
对用户来讲,更明确的功能指引,以及更少深度的层次结构
-
非常利于SEO
缺点
-
前后端开发关联紧密。
-
开发更复杂,开发者需要同时在前后端展开工作,将导致更长的开发周期。
使用SPA还是MPA
如果你有风格迥异的内容以及复杂的分类,那建议使用MPA。
如果的内容拥有一致的体验,那建议使用SPA。
另外一种方式拥有两者的优点和更少的缺点,考虑`Hybird app
Hybrid App
Hybrid APP指的是半原生半Web的混合类App。兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势”。 。需要下载安装,看上去类似Native App,但只有很少的UI Web View,访问的内容是 Web 。
混合式 APP 目前有越来越火的趋势,一大原因是可以进行“热更新”,不再受限于审核、上线等等繁复的流程。
AppStore里的电商类、新闻类APP,视频类APP普遍采取的是Native的框架,Web的内容。如淘宝、腾讯新闻等等。
Hybrid App 极力去打造类似于Native App 的体验,但仍受限于技术,网速,等等很多因素。 Hybrid App按网页语言与程序语言的混合,又分为四种类型:多View混合型、单View混合型、Web主体型和多主体共存型(灵活型)。
多View混合型 指Native View和Web View独立展示,交替出现。 这种应用混合逻辑相对简单。即在需要的时候,将WebView当成一个独立的View(Activity)运行起来,在WebView内完成相关的展示操作。这种移动应用主体通常是Native App,Web技术只是起到补充作用。开发难度和Native App基本相当。
单View混合型即在同一个View内,同时包括Native View和Web View,互相之间是覆盖(层叠)的关系。 这种Hybrid App的开发成本较高,开发难度较大,但是体验较好。
如百度搜索为代表的单View混合型移动应用,既可以实现充分的灵活性,又能实现较好的用户体验。
Web主体型即移动应用的主体是Web View,主要以网页语言编写,穿插Native功能的Hybrid App开发类型。 这种类型开发的移动应用体验相对而言存在缺陷,但整体开发难度大幅降低,并且基本可以实现跨平台。
Web主体型的移动应用用户体验的好坏,主要取决于底层中间件的交互与跨平台的能力。Hybrid App中的Web主体型只要能够解决用户体验差的问题,就可以变成最佳Hybrid App解决方案类型。
多主体共存型(灵活型)是一种新型的开发模式,即支持Web主体型的应用,又支持以Native主体的应用,也支持两者混合的开发模式。 比如kerkee框架,它具有跨平台、用户体验好、性能高、扩展性好、灵活性强、易维护、规范化、具有Debug环境、彻底解决跨域问题等特点。用户体验与Native App媲美。功能方面,开发者可随意扩展接口。