SPA通常只一个web页面,经过ajax,router等技术实现局部刷新,不会随着用户操做而出现从新加载页面或者页面跳转的功能,全部的用户操做都在一个页面实现。web
组件化:UI组件和非UI组件ajax
传统的ui层:UI和逻辑混在一块儿,好比每每会在远程请求的回调中更改DOM后端
分层带来的优点:每层的职责更专注,能够对其做单元测试的覆盖,以保证其质量缓存
代码隔离:服务器
因为SPA把各类子功能的js代码汇集到一个做用域,所以代码的隔离和模块化很重要架构
代码合并和加载前后端分离
因为SPA界面基本都是动态生成的,因此不用担忧文件加载从而阻塞渲染模块化
路由和状态的管理组件化
好比说咱们有一个功能,经历过屡次导航菜单的点击,才呈现出来。若是用户想要把这个功能地址分享给别人,他怎么才能作到呢?单元测试
具体作法就是把产品功能划分为若干状态,每一个状态映射到相应的路由,而后经过pushState这样的机制,动态解析路由,有了路由以后,SPA就能够前进后退
缓存和本地存储
服务器通讯
webSocket实时通信方式
内存管理
传统的web页面通常不须要考虑内存管理,由于用户的停留时间相对少,即便出现内存泄露,可能很快的被刷新页面之类的咋偶哦冲掉。但SPA不会这样,所以咱们对DOM操做、网路连接等要格外当心
特色:一个页面集成多种功能,不会随着用户的操做而从新加载页面或者进行页面的跳转,而是局部动态的变换HTML内容
优势:
a.用户体验好、快,内容的改变不须要从新加载整个页面,不会出现页面假死的状况
b.减小服务器的压力。
服务器只管输出数据,不用管显示逻辑和页面合成,吞吐能力提升几倍
c.良好的先后端分离。
SPA和RESTFUL架构一块儿使用,后端再也不负责渲染模板、输出页面工做,后端API通用化
d.不存在页面多跳转状况下的页面状态传值问题
缺点:
a.不利于SEO
b.初次加载耗时相对大
c.导航不可用(前进和后退的实现有必定的局限性)