《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平台 ...
随机推荐
- 从 QSplitter 中移除 QWidget(使用隐藏与显示,切换十分方便,不要真正销毁)
Splitter 的函数中有addWidget,但是却没有removeWidget, 或者delete之类的功能,所以如果想删去或者暂时不显示其中的某些widget就要自己手动完成这个效果.方法一:取 ...
- HDU 1548 A strange lift(最短路&&bfs)
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- asp.net 前后台数据交互方式(转)
https://blog.csdn.net/luckyrass/article/details/38758007 一.前台直接输出后台传递的数据 后台代码: // .aspx.cs public st ...
- BZOJ3091: 城市旅行(LCT,数学期望)
Description Input Output Sample Input 4 5 1 3 2 5 1 2 1 3 2 4 4 2 4 1 2 4 2 3 4 3 1 4 1 4 1 4 Sample ...
- WPF 入门《布局面板》
常见的几个布局面板 1.StackPanel面板 StackPanel面板能够简单根据单行或者单列进行元素排列, StackPanel 默认的布局方向为垂直方向(Vertical), 由Orienta ...
- 决策树2 -- CART算法
声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结.不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记.所以为 ...
- drawable-图片绘制
首先看一下,下端代码 private Bitmap createSelectedChip(RecipientEntry contact, TextPaint paint) { int height = ...
- 好玩的 emoji
emoji 就是表情符号,来自日语词汇"絵文字"(假名为"えもじ",读音即emoji).emoji 表情符号大全,都在这里(手机/电脑都可以复制):www.fu ...
- Writing Images to the Excel Sheet using PHPExcel--转载
原文地址:http://www.walkswithme.net/writing-images-to-the-excel-sheet-using-phpexcel Writing images to t ...
- JS实现联想自动补齐功能
<!DOCTYPE HTML> <html> <head> <meta charset = "utf-8"> <title&g ...