码迷,mamicode.com
首页 > 其他好文 > 详细

SPA单页应用

时间:2020-03-12 21:39:28      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:局限   定义   mvvm   前端开发   时间   push   机制   html   需要   

所谓单页应用,指的是在一个页面上集成多种功能,甚至整个系统就只有一个页面,所有的业务功能都是它的子模块,通过特定的方式挂接到主界面上。它是AJAX技术的进一步升华,把AJAX的无刷新机制发挥到极致,因此能造就与桌面程序媲美的流畅用户体验。

为了解决单页应用规模增大时候的代码逻辑问题,出现了不少MV*框架,他们的基本思路都是在JS层创建模块分层和通信机制。有的是MVC,有的是MVP,有的是MVVM,而且,它们几乎都在这些模式上产生了变异,以适应前端开发的特点。

这类框架包括Backbone,Knockout,AngularJS,Avalon等。

组件化

 

分层带来的一个优势是,每层的职责更专一了,由此,可以对其作单元测试的覆盖,以保证其质量。

传统UI层测试最头疼的问题是UI层和逻辑混杂在一起,比如往往会在远程请求的回调中更改DOM,当引入分层之后,这些东西都可以分别被测试,然后再通过场景测试来保证整体流程。

代码隔离

  由于SPA把各种子功能的js代码聚集到一个作用域,因此代码的隔离和模块化很重要

代码合并和加载

  由于SPA界面基本都是动态生成的,所以不用担心文件加载从而阻塞渲染

路由和状态的管理

  比如说我们有一个功能,经历过多次导航菜单的点击,才呈现出来。如果用户想要把这个功能地址分享给别人,他怎么才能做到呢?

  具体做法就是把产品功能划分为若干状态,每个状态映射到相应的路由,然后通过pushState这样的机制,动态解析路由,有了路由之后,SPA就可以前进后退

缓存与本地存储

在单页应用的运作机制中,缓存是一个很重要的环节。

由于这类系统的前端部分几乎全是静态文件,所以它能够有机会利用浏览器的缓存机制,而比如动态加载的界面模板,也完全可以做一些自定义的缓存机制,在非首次的请求中直接取缓存的版本,以加快加载速度。

服务端通信

传统的Web产品通常使用JSONP或者AJAX这样的方式与服务端通信,但在单页Web应用中,有很大一部分采用WebSocket这样的实时通讯方式。

WebSocket与传统基于HTTP的通信机制相比,有很大的优势。它可以让服务端很便利地使用反向推送,前端只响应确实产生业务数据的事件,减少一遍又一遍无意义的AJAX轮询。

内存管理

传统的Web页面一般是不需要考虑内存的管理的,因为用户的停留时间相对少,即使出现内存泄漏,可能很快就被刷新页面之类的操作冲掉了,但单页应用是不同的,它的用户很可能会把它开一整天,因此,我们需要对其中的DOM操作、网络连接等部分格外小心。

特点:一个页面集成多种功能,不会随着用户的操作而重新加载页面或者进行页面的跳转,而是局部动态的变换HTML内容

优点:

   a.用户体验好、快,内容的改变不需要重新加载整个页面,不会出现页面假死的情况

   b.减少服务器的压力。

    服务器只管输出数据,不用管显示逻辑和页面合成,吞吐能力提高几倍

   c.良好的前后端分离。

    SPA和RESTFUL架构一起使用,后端不再负责渲染模板、输出页面工作,后端API通用化

   d.不存在页面多跳转情况下的页面状态传值问题

 

缺点:

   a.不利于SEO

   b.初次加载耗时相对大

   c.导航不可用(前进和后退的实现有一定的局限性)

 

SPA单页应用

标签:局限   定义   mvvm   前端开发   时间   push   机制   html   需要   

原文地址:https://www.cnblogs.com/lora404/p/12482881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!