认识路由及其实现的两种方法14

认识路由

路由(网络工程术语),指通过互联的网络把信息从原地址传输到目的地址的活动。

生活中常见的,路由器。路由器有两种机制:路由、转送。

  • 路由:决定数据包从来源到目的地的路径。
  • 转送:将输入端的数据转移到合适的输出端。
  • 补充:
    • 家中牵网线:运营商牵线到家中的猫,猫连接路由器。
    • 猫的ip是公网ip(形如202.111.23.45)。互联网中ip地址是唯一的指公网ip。
    • 路由器ip是内网ip(形如192.168.1.10),内网ip只在当前所在网络中有效。
    • 路由表:本质是一个映射表,决定数据包的指向。内网ip与电脑mac地址(电脑标识)一一对应,即内网ip与每个设备分配的地址对应,形如
      [
      内网ip1—电脑标识1
      内网ip2—电脑标识2
      ……
      ]
      A给B发送消息,通过目的地址的公网ip找到对应的猫连接的路由器,路由器再根据路由表中的电脑标识(电脑的mac地址)找到对应的内网ip,将信息转送给B。

后端路由、前后端分离、前端路由

1、后端路由

早期网页开发一般运用的技术:html+css+jsp(java serve page)。

用户在页面中请求不同的路径内容时,交给服务器处理。由服务器渲染好对应url的整个页面,之后返回给客户端进行展示。即:后端处理URL和页面之间的映射关系。

过程:

  • 每一个页面对应一个url。
  • url发送到服务器,服务器通过正则等方法对url进行匹配,之后交给Controller进行处理。
    • controller处理完后,生成html和数据,返回给浏览器。

优点:

  • 渲染好的页面直接由浏览器展示,不需要单独加载任何的css等文件;
  • 有利于SEO的优化。(Search Engine Optimization,是一种方式:利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。)

缺点:

  • 整个页面的模块都需要由后端人员来编写和维护 或 前端人员开发页面需要通过java或php来编写代码。
  • 通常html代码和数据以及对应的逻辑会混在一起,不利于编写和维护。

2、前后端分离

重点:Ajax

  • ajax的诞生,出现了前后端分离的开发模式;

过程:

后端只提供Api返回数据。前端通过ajax获取数据,并通过js将数据渲染到页面中。

  • 用户在浏览器中输入url
  • **静态资源服务器(包含多套html、css、js)**接收并解析获取的url,拿取对应的html+css+js由浏览器渲染执行
  • 浏览器发送ajax请求到提供Api接口的服务器
  • 服务器传送大量数据到浏览器进行渲染
  • 浏览器将接收到的数据展示在页面中

优点:

  • 前后端工作分配明晰,后端专注数据,前端注重交互与可视化。
  • PC端和移动端(IOS/Android)可以使用一套API,后端不需要进行其他处理。

3、前端路由

把不同路由对应不同的内容或页面的任务交给前端。

单页面富应用阶段
SPA(single page web application):单页Web应用。

  • 加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。
  • 主要特点:
    • 只有一个html页面。
    • 在前后端分离的基础上加了一层前端路由。

核心:

  • 改变url,但页面不进行整体的刷新。

过程:

  • 前端通过hash函数或History API,将路径与相应的组件映射起来。
  • 用户在浏览器输入url
  • 前端自动监听,发现url改变后,去抽取js文件,把与url对应的组件直接从下载好的资源中抽离出来(之前已经将html、css、js全部下载到浏览器,故不会向服务器请求资源),前端渲染之后展示在浏览器上。

优点:

  • 页面刷新速度快,不需要服务器来进行解析
  • 复用性强,html、css、js文件都可以共用
  • 页面状态可记录。

前端路由的实现

改变URL的hash

url的hash,即锚点#。

  • 改变url的hash,本质是改变window.location的href属性内容。
  • 可通过改变location.hash改变href,但页面不刷新

在这里插入图片描述

location.hash=‘xxx’
路由映射:找到url对应的组件渲染在浏览器上,页面不刷新。
在这里插入图片描述
在这里插入图片描述

修改HTML5的history

history接口,五种模式改变url,但不刷新页面
在这里插入图片描述
go、forward、back等同于浏览器控制页面前进后退的按钮
在这里插入图片描述

1、pushState,入栈,返回当前url

在这里插入图片描述
history.pushState({},'','/xxx')
在这里插入图片描述
页面未刷新
在这里插入图片描述

在这里插入图片描述

2、replaceState,替代当前url,返回新的url,且无法回退到上一个历史界面

在这里插入图片描述
history.replace({},'','/xxx')
在这里插入图片描述

3、back,返回下一个url

在这里插入图片描述
history.back()
在这里插入图片描述
在这里插入图片描述

4、forward,返回上一个url

在这里插入图片描述
在这里插入图片描述

5、go,以当前位置为基准,返回上/下第n个

在这里插入图片描述
history.go(n)
history.go(1)等同于history.forward()
history.go(-1)等同于history.back()

在这里插入图片描述
栈空间
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值