《SPA设计与架构》之客户端路由
原文
简书原文:https://www.jianshu.com/p/4d83475f71da
大纲
1、传统路由
2、SPA导航
3、客户端路由器的工作机制
1、传统路由
在传统Web应用程序中,导航是以整个Web页面为单位进行的。当在浏览器地址栏输入一个新的URL地址时,通常情况下,页面请求从浏览器发往服务器,服务器响应并返回一个完整的HTML页面。
其返回的是请求页面的HTML文档,浏览器收到页面HTML文档之后,将获取该文档引用的其他所有源文件,如CSS与JavaScript文件。HTML文档引用的其他资源如图片,也将在浏览器解析文档的HTML代码及遇到相应标签时得以下载。要显示新内容,浏览器就执行一次完整的刷新动作。

2、SPA导航
SPA的DOM元素通常是作为SPAindex页面中的Shell的起点。这就是全部所需。SPA模块及MV*框架,包括支持库,都跟index页面一同下载,或者使用了AMD脚本加载库的话则进行异步加载。SPA应用也有能力异步获取 数据、任何远程模板(局部)以及尚未包括的其他资源,并按需动态渲染视图。
当用户导航时,视图无缝呈现。连同异步获取的数据,整个应用展示过程更加平滑,给人一种类似原生应用的效果,极大提升了用户体验。以往那种旧页面被清除,然后下载显示新页面所带来的粗糙体验已不复存在。一旦初始页面加载了,SPA的各种动作都不需要刷新它。
然而,在SPA应用加载之后,用户需要有一种方式来访问应用的其它内容。由于SPA仍然属于基于Web的应用程序,因此,用户会希望使用地址栏和导航按钮来进行导航。但在只有一个页面而且不刷新浏览器的情况下如何进行SPA导航呢?
事实证明,这不仅可能,也很容易。让单页面环境中的导航成为可能的法宝就是客户端路由器(或简称路由器)。
但请记住当我们讨论导航时,说的是在用户导航时管理SPA视图、数据以及业务事务的状态。路由器承担着浏览器导航控制的职责,并依此管理应用程序状态,其允许开发者直接将URL的改变映射到客户端功能上。
通过这种方式,与服务器端的往返已不再是必需的。路由器借助几种侦测浏览器位置发生改变的方法,来决定何时需要变化状态,比如监听特定事件。只要URL发生改变,路由器就会试着使用其配置里的某个配置项来匹配新URL的某部分。
在剖析典型的路由器配置项之前,先来看一下图4.3,其提供了SPA导航过程的概览,其中还突出显示了客户端路由器。请注意路由器从未与服务器端发生交互。所有的路由都在浏览器端完成。


3、客户端路由器的工作机制
客户端路由器的部分职责是允许用户如同传统Web应用中那样使用地址栏和浏览器导航按钮。许多客户端路由器为了满足该需求至少都提供了以下特性:
1、通过路由定义的路径来匹配URL模式
2、当匹配成功时允许应用程序执行代码
3、当路由触发时允许指定需显示的具体视图
4、允许通过路由路径传入参数
5、允许用户使用标准的浏览器导航方式来进行SPA应用导航。
这些特性是提供最低限度SPA导航功能所必需的。但请记住,不存在所有客户端路由器必须遵循的保障标准。这些知识我们会遇到的最常见选项。
路由器通过两种方式进行导航:
1、通过URL的片段标识符(fragment identifiter)
2、通过HTML5历史API(History API)
这两种方式能够让路由器提供非服务器端的导航,即不会向服务器端发送请求
《SPA设计与架构》之客户端路由的更多相关文章
- 《SPA设计与架构》之认识SPA
原文 简书原文:https://www.jianshu.com/p/84323f530223 大纲 前言 1.什么是单页面应用程序(SPA) 2.SPA与传统Web应用的区别 3.关于SPA的使用 4 ...
- 《SPA设计与架构》之MV*框架
原文 简书原文:https://www.jianshu.com/p/39f8f0aefdc2 大纲 1.认识MV*框架 2.传统UI设计模式 3.对框架的本质认识——框架有效性和框架分类 4.MV*基 ...
- 《SPA设计与架构》之JavaScript模块化
原文 简书原文:https://www.jianshu.com/p/d5fc38506bc4 大纲 1.什么是模块? 2.基本的模块模式 3.模块模式概念 4.模块结构 5.揭示模式 6.模块编程的意 ...
- 简述移动端IM开发的那些坑:架构设计、通信协议和客户端
1.前言 有过移动端开发经历的开发者都深有体会:移动端IM的开发,与传统PC端IM有很大的不同,尤其无线网络的不可靠性.移动端硬件设备资源的有限性等问题,导致一个完整的移动端IM架构设计和实现都充满着 ...
- 通过Microsoft Azure服务设计网络架构的经验分享(转)
原文:http://www.infoq.com/cn/articles/azure-networking-tips 本文从产品设计和架构角度分享了 Microsoft Azure 网络服务方面的使用经 ...
- 通过Microsoft Azure服务设计网络架构的经验分享
作者 王枫 发布于 2014年4月8日 本文从产品设计和架构角度分享了Microsoft Azure网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构. Mic ...
- 处理ASP.NET Core中的HTML5客户端路由回退
在使用由Angular,React,Vue等应用程序框架构建的客户端应用程序时,您总是会处理HTML5客户端路由,它将完全在浏览器中处理到页面和组件的客户端路由.几乎完全在浏览器中... HTML5客 ...
- Java开源生鲜电商平台-异常模块的设计与架构(源码可下载)
Java开源生鲜电商平台-异常模块的设计与架构(源码可下载) 说明:任何一个软件系统都会出现各式各样的异常与错误,我们需要根据异常的情况进行捕获与分析,改善自己的代码,让其更加的稳定的,快速的运行,那 ...
- Java生鲜电商平台-供应链模块的设计与架构
Java生鲜电商平台-供应链模块的设计与架构 说明:Java开源生鲜电商平台中供应链模块属于卖家的行为,也就是卖家如何管理他们自己的供应商,包括结算方式,压款方式,结算周期等等,超出了我这个B2B平台 ...
随机推荐
- 今日SGU 5.8
SGU 109 题意:一个n*n的矩形,起点在1,1然后每次给你一个操作,走ki步,然后你可以删除任意一个点这次步走不到的,删了就不能再走了,然后问构造这种操作,使得最后删除n*n-1个点 剩下一个点 ...
- JavaScript学习总结(11)——JS常用函数(二)
37. getElementsByClassName ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getElementsByClassName( ...
- Java生产者与消费者(下)
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 上一讲我们让消费者和生产者都各停1毫秒,实际上大多并不是这样的.第二讲,我们讲一个极端的例子和一个正 ...
- 项目报错:Cannot find class file for javax/servlet/ServletException
两种解决方法: 1. 假设是Maven项目,加入servlet-api依赖包: <dependency> <groupId>javax.servlet</groupId& ...
- Spring有用功能--Profile、WebService、缓存、消息、ORM
本篇介绍一些Spring与其它框架结合的有用功能,包含:Apache CXF WebService框架.Redis缓存.RabbitMQ消息.MyBatis框架. 另外对于Profile,也是Spri ...
- codecombat之边远地区的森林12-22关及地牢39关代码分享
codecombat中国游戏网址:http://www.codecombat.cn/ 全部代码为javascript代码分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- 3.JPA开发
转自:https://blog.csdn.net/aspnetandjava/article/details/7034779 1. 什么是JPA 1. JPA(Java Persistence API ...
- 一起talk C栗子吧(第九回:C语言实例--最大公约数)
各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是素数的样例.这一回咱们说的样例是: ...
- 【习题 6-11 UVA - 10410】Tree Reconstruction
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 可以先确定当前这棵子树的dfs序的范围. 然后第一个元素肯定是这棵子树的根节点. 那么只要在这棵子树的范围里面枚举节点. 看看有没有 ...
- PatentTips - Use of multiple virtual machine monitors to handle privileged events
BACKGROUND OF THE INVENTION A conventional virtual-machine monitor (VMM) typically runs on a compute ...