vue-learning:38 - router - 前端路由的发展

前端路由的发展

参考博客
前端路由是什么东西?

什么是路由

在jQuery时代,我们使用<a href="https://www.example.com/example/home.html">实现页面切换。

其响应过程是这样的
1.浏览器发出请求
2.服务器监听到指定端口的请求,并解析url路径
3.浏览器根据数据包的Content-Type来决定如何解析数据
4.根据服务器的路由配置,返回相应信息(比如返回html文件的字串,也可以是 json 数据,图片等)
5.浏览器接收html文件并渲染出页面显示

就是所谓的SSR(Server Side Render),通过服务端渲染,直接返回页面。

简单来说路由就是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源。其中请求不同的页面只是路由的其中一种功能。

前端路由的诞生

前端路由的出现要从 ajax 开始,为什么?且听下面分析:

Ajax,全称 Asynchronous JavaScript And XML,是浏览器用来实现异步加载的一种技术方案。在 90s 年代初,大多数的网页都是通过直接返回 HTML 的,用户的每次更新操作都需要重新刷新页面。及其影响交互体验,随着网络的发展,迫切需要一种方案来改善这种情况。

1996,微软首先提出 iframe 标签,iframe 带来了异步加载和请求元素的概念,随后在 1998 年,微软的 Outloook Web App 团队提出 Ajax 的基本概念(XMLHttpRequest的前身),并在 IE5 通过 ActiveX 来实现了这项技术。在微软实现这个概念后,其他浏览器比如 Mozilia,Safari,Opera 相继以 XMLHttpRequest 来实现 Ajax。(sob 兼容问题从此出现,话说微软命名真喜欢用X,MFC源码一大堆。。)不过在 IE7 发布时,微软选择了妥协,兼容了 XMLHttpRequest 的实现。

有了 Ajax 后,用户交互就不用每次都刷新页面,体验带来了极大的提升。

但真正让这项技术发扬光大的,(????)??还是后来的 Google Map,它的出现向人们展现了 Ajax 的真正魅力,释放了众多开发人员的想象力,让其不仅仅局限于简单的数据和页面交互,为后来异步交互体验方式的繁荣发展带来了根基。

而异步交互体验的更高级版本就是 SPA—单页应用。单页应用的概念是伴随着 MVVM 出现的。最早由微软提出,然后他们在浏览器端用 Knockoutjs 实现。但这项技术的强大之处并未当时的开发者体会到,可能是因为 Knockoutjs 实现过于复杂,导致没有大面积的扩散。

同样,这次接力的选手依然是 Google。Google 通过 Angularjs 将 MVVM 及单页应用发扬光大,让前端开发者能够开发出更加大型的应用,职能变得更大了。(不得不感慨,微软 跟 Google 都是伟大的公司)。随后都是大家都知道的故事,前端圈开始得到了爆发式的发展,陆续出现了很多优秀的框架。

前端三驾马车Angular,Vue,React均基于此模型来运行的。

单页面应用指的是应用只有一个主页面,通过动态替换DOM内容并同步修改url地址,来模拟多页应用的效果,切换页面的功能直接由前台脚本来完成,不再是由后端渲染完毕后传给前端显示。

单页应用不仅仅是在页面交互是无刷新的,连页面跳转都是无刷新的,为了在单页应用中实现多页面的切换,所以就有了前端路由,也叫客户端路由(client side routing)。

前端路由,顾名思义就是前端不同页面的状态管理器,可以不向后台发送请求而直接通过前端技术实现多个页面的效果。

前端路由实现的原理

前端路由的实现其实很简单:
本质上就是捕获 url 的变化, 然后解析当前url地址,匹配定义的路由规则,更新相应的DOM内容。

根据前端路由的定义,有两点关键:

  • 能够捕获到url变化的事件
  • url的更新不会触发页面刷新,即不会向服务器发起请求。

而刚好BOM中的location对象的hash属性满足以上两点。

// 符号#紧接着的就是hash值
https://segmentfault.com/a#article

hash值的变化,并不会导致浏览器向服务器发出请求,浏览器不发出请求,也就不会刷新页面。
另外每次 hash 值的变化,还会触发 hashchange 这个事件,通过监听这个事件我们就可以知道 hash 值发生了哪些变化。

所以前端路由的一种实现方式就是hash模式

在HTML5标准发布,对BOM中的history对象新增了两个API:pushState,replaceState,以及一个事件onpopstate

pushStatereplaceState会创建新的历史记录,并显示在url地址栏中,但并不会导致浏览器请求加载并刷新此时的页面显示。
同时,浏览器中点击后退或前进,或者在js中直接调用history对象的其它几个APIistory.back()、history.forward()、history.go()都会触发popstate事件。

调用history.pushState()或者history.replaceState()不会触发popstate事件. popstate事件只会在浏览器某些行为下触发, 比如点击后退、前进按钮(或者在JavaScript中调用history.back()、history.forward()、history.go()方法).
MDN

所以前端路由的另一种实现方式就是history模式

造轮子参考

原文地址:https://www.cnblogs.com/webxu20180730/p/11031295.html

时间: 2024-07-31 02:40:50

vue-learning:38 - router - 前端路由的发展的相关文章

vue中this.$router.push()路由传值和获取的两种常见方法

1.路由传值   this.$router.push() (1) 想要导航到不同的URL,使用router.push()方法,这个方法会向history栈添加一个新纪录,所以,当用户点击浏览器后退按钮时,会回到之前的URL (2)当点击 <router-link> 时,这个方法会在内部调用,即点击 <router-link :to="..."> 等同于调用 router.push(...) a)      声明式:<router-link :to=&quo

vue+axios完美实现前端路由拦截

一.路由拦截 1.首先在router的index.js里配置一个自定义字段requireAuth,用该字段来判断进入该路由是否需要登录.如果已经登陆则进入该路由,反之则进入登录页面. 如图是路由配置: 2.在main.js里面利用vue-router的beforeEach钩子函数对路由进行判断. 实例代码如下所示: 解释下这段代码,当我们在登录的时候,利用sessionStorage保存了用户的token值,如果我们进入某一个需要登录的路由并且能够拿到token值的话,则可以直接next():反

vue router动态路由

<div id="#app"> <router-link to="/user/header">路由1</router-link> /*指向user组件*/ <router-link to="/user/footer">路由2</router-link> /*指向user组件*/ /*当我们点击路由1得时候*/ /*------当我们点击路由2得时候*/ <router-view&g

Vue 之前端路由

前端路由的原理 根据锚点的不同,走不同的路由,驱动不同的组件,实现单页面的展示. V_router的基本使用 创建路由对象 注意: -------------------------------------------------------------------------------- 命名路由 原文地址:https://www.cnblogs.com/swearBM/p/10738801.html

实现前端路由

在单页应用上,前端路由并不陌生.单页应用是指在浏览器中运行的应用,在使用期间页面不会重新加载.       基本原理:以 hash 形式(也可以使用 History API 来处理)为例,当 url 的 hash 发生改变时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示.       基于hash的前端路由优点是:能兼容低版本的浏览器. history 是 HTML5 才有的新 API,可以用来操作浏览器的 session history (会话历史). 

利用JS实现前端路由

在以前的web程序中,路由字眼只出现在后台中.但是随着SPA单页面程序的发展,便出现了前端路由一说.单页面顾名思义就是一个网站只有一个html页面,但是点击不同的导航显示不同的内容,对应的url也会发生变化,这就是前端路由做的事.也就是通过JS实时检测url的变化,从而改变显示的内容. 目前很多前端框架都有接口去实现路由,比如vuejs的vue-route等.我们可以利用原生的hashchange事件来模拟一个简单的路由. 实例的html代码: Document index news about

自己动手写一个前端路由插件

在单页应用上,前端路由并不陌生.单页应用是指在浏览器中运行的应用,在使用期间页面不会重新加载.       基本原理:以 hash 形式(也可以使用 History API 来处理)为例,当 url 的 hash 发生改变时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示.       基于hash的前端路由优点是:能兼容低版本的浏览器. history 是 HTML5 才有的新 API,可以用来操作浏览器的 session history (会话历史). 

前端路由的实现(二)

HTML5History History interface是浏览器历史记录栈提供的接口,通过back(), forward(), go()等方法,我们可以读取浏览器历史记录栈的信息,进行各种跳转操作. 从HTML5开始,History interface提供了两个新的方法:pushState(), replaceState()使得我们可以对浏览器历史记录栈进行修改: stateObject: 当浏览器跳转到新的状态时,将触发popState事件,该事件将携带这个stateObject参数的副本

前端路由简介以及vue-router实现原理

后端路由简介 路由这个概念最先是后端出现的.在以前用模板引擎开发页面时,经常会看到这样 http://www.xxx.com/login 大致流程可以看成这样: 浏览器发出请求 服务器监听到80端口(或443)有请求过来,并解析url路径 根据服务器的路由配置,返回相应信息(可以是 html 字串,也可以是 json 数据,图片等) 浏览器根据数据包的 Content-Type 来决定如何解析数据 简单来说路由就是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源,请求不同的页