原文

  简书原文: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)
  这两种方式能够让路由器提供非服务器端的导航,即不会向服务器端发送请求

转载于:https://www.cnblogs.com/shcrk/p/9292296.html

《SPA设计与架构》之客户端路由相关推荐

  1. angular-1.2.32路由控制写法与《SPA设计与架构》写法的部分区别

    今天在尝试用angularJS写一则简单的单页面程序时,所用ide为idea的angularJS插件,发现了再路由控制写法与之前所读书籍(<SPA设计与架构>作者:Emmit A.Scot ...

  2. SPA设计与架构-理解单页面Web应用 (埃米顿.A斯科特) 中文pdf扫描版

    SPA 开发技术的运用是当今Web 开发领域的热门趋势,但真正全面掌握该技术的开发者并不多.本书详尽阐述单页面Web 应用(SPA)开发技术,从SPA 构建基础入手,通过MV*.模块化编程.路由.模块 ...

  3. 《SPA设计与架构》之认识SPA

    原文 简书原文:https://www.jianshu.com/p/84323f530223 大纲 前言 1.什么是单页面应用程序(SPA) 2.SPA与传统Web应用的区别 3.关于SPA的使用 4 ...

  4. 架构设计本质-架构思维

    前言: 本篇文章结合多数人在工作中的模块开发,架构设计情况,以及相关权威性文章和书籍,总结下如何在开发过程中,慢慢养成架构思维,共设计以下几个方面: 正文: 简单介绍下架构设计: 软件架构是一个系统的 ...

  5. 处理ASP.NET Core中的HTML5客户端路由回退

    在使用由Angular,React,Vue等应用程序框架构建的客户端应用程序时,您总是会处理HTML5客户端路由,它将完全在浏览器中处理到页面和组件的客户端路由.几乎完全在浏览器中... HTML5客 ...

  6. python后台架构Django教程——路由映射urls

    全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng825485697/articl ...

  7. 如何一步步设计前端架构?

    前端有架构吗?前端有架构模式吗? 架构是什么? 软件架构,是一种为了解决复杂问题的通用模式.软件架构,是关于软件系统的一系列有层次的技术决策的集合.换句话来说,当我们讨论架构的时候,不能只讨论某某架构 ...

  8. Java生鲜电商平台-异常模块的设计与架构

    Java生鲜电商平台-异常模块的设计与架构 说明:任何一个软件系统都会出现各式各样的异常与错误,我们需要根据异常的情况进行捕获与分析,改善自己的代码,让其更加的稳定的,快速的运行,那么作为一个 B2B ...

  9. 软件工程课程设计·SOA架构搭建SSM框架的网上商城系统

    软件工程课程设计·SOA架构搭建SSM框架的网上商城系统 项目简介 本系统利用SSM框架.Dubbo框架.Maven模块化开发等技术开发的一个网上商城项目,主要包括订单系统模块.购物车系统模块.搜索系 ...

最新文章

  1. ECMAScript 6 模板字面量的常见用法
  2. 【EventBus】事件通信框架 ( 订阅方法注册 | 注册 事件类型 - 订阅类 + 订阅方法 到指定集合 | 取消注册 数据准备 )
  3. 《Fabric 云存储的电子健康病历系统》(3)病历结构体API
  4. C盘不够用了怎么办,看我4年未重做系统如何清理出25G的temp磁盘空间?
  5. Django框架(二)
  6. CityEngine快捷键一览表
  7. 计算机绘图理论试题库,CAD理论试卷及答案「最新」
  8. 驳熊节和Martin Fowler的Java消亡论!
  9. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
  10. 橡胶支座抗压弹性模量计算公式_单向滑动抗震弹性支座作用介绍
  11. java-maven的配置
  12. Chrome驱动对应chrome浏览器版本
  13. 物联网专业有哪些含金量高的比赛?
  14. 深圳物流 inurl php id=,免费快递在线下单接口对接文档-(PHP)
  15. 索引及其背后的数据结构(顺带介绍了一下子查询和合并查询)
  16. 什么是穿透式监管,需要投资者做什么?
  17. PHP大型Web应用入门
  18. 企业APP联盟,抢占企业移动互联网时代营销制高点
  19. ROS系统SLAM基础学习:gazebo仿真机器人自主导航
  20. 如何利用API实现行式报表后台导入excel数据入库

热门文章

  1. 程序员常用入门项目整理
  2. Error: invalid expiresIn option for string payload
  3. Macbook m1安装homebrew
  4. 基于android百度云推送务设计,Android之基于百度云推送IM
  5. 量子链Qtum ERC20 兑换为主网络币的公告
  6. 深入理解C++中五种强制类型转换的使用场景
  7. J9数字论:以太坊合并?以太坊合并又会带来哪些影响?
  8. 人生思维与职业的转变
  9. oracle存储过程游标写法,Oracle存储过程,游标使用
  10. 关于二进制的常用代码(学习笔记)