美文网首页
路由、前端路由和后端路由

路由、前端路由和后端路由

作者: Camilia_yang | 来源:发表于2019-08-17 00:12 被阅读0次

一、路由

简单来说,路由就是URL到函数的映射。
在 Web 服务的程序中,不同路径对应着各自的处理逻辑,程序会把请求交给路径所对应的处理逻辑,这样就完成了一次「路由分发」,这个分发就是通过「路由」来完成的。
以前路由都是后台做的,通过用户请求的url导航到具体的html页面,前端路由就是通过配置js文件,把这个工作拿到前端来做。
简单的说,路由是根据不同的 url 地址展示不同的内容或页面

二、后端路由:

对于服务器来说,当接收到客户端发来的HTTP请求,会根据请求的URL,来找到相应的映射函数,然后执行该函数,并将函数的返回值发送给客户端。对于最简单的静态资源服务器,可以认为,所有URL的映射函数就是一个文件读取操作。对于动态资源,映射函数可能是一个数据库读取操作,也可能是进行一些数据的处理,等等。

三、前端路由

前端路由的映射函数通常是进行一些DOM的显示和隐藏操作。当访问不同的路径的时候,会显示不同的页面组件。前端的路由和后端的路由在实现技术上不一样,但是原理都是一样的。

1.基于hash实现的前端路由

在 HTML5 的 history API 出现之前,前端的路由都是通过 hash 来实现的,hash 能兼容低版本的浏览器。如果我们把上面例子中提到的 3 个页面用 hash 来实现的话,它的 URI 规则中需要带上 #

1 http://10.0.0.1/
2 http://10.0.0.1/#/about
3 http://10.0.0.1/#/concat

Web 服务不会解析 hash,也就是说 # 后的内容 Web 服务都会自动忽略,但是 JavaScript 是可以通过 window.location.hash 读取到的,读取到路径加以解析之后就可以响应不同路径的逻辑处理。(重点)

window.onhashchange = function() {
  var hash = window.location.hash
  var path = hash.substring(1)
  switch (path) {
    case '/':
      showHome()
      break
    case '/users':
      showUsersList()
      break
    default:
      show404NotFound()
  }
}

hash有以下几个特性:

  • hash仅仅是客户端的一个状态,也就是说,当向服务器发请求的时候,hash部分并不会发过去。
  • hash值的改变,都会在浏览器的访问历史中增加一个记录。因此我们能通过浏览器的回退、前进按钮控制hash的切换。

触发hsah变化的两种方式:

  • 通过a标签,并设置href属性,当用户点击这个标签后,URL就会发生改变,也就会触发hashchange事件了:
<a href="#srtian">srtian</a>
  • 直接使用JavaScript来对loaction.hash进行赋值,从而改变URL,触发hashchange事件:
location.hash="#srtian"

2.基于history API实现的前端路由

history 是 HTML5 才有的新 API,可以用来操作浏览器的 session history。基于 history 来实现的路由可以和最初的例子中提到的路径规则一样。

1 http://10.0.0.1/
2 http://10.0.0.1/about
3 http://10.0.0.1/concat

例子:

window.history.pushState(state, title, url)

其中state和title可以为空,url中填上/ 、/about、/concat

前端路由的使用场景

前端路由更多用在单页应用上, 也就是SPA, 因为单页应用, 基本上都是前后端分离的, 后端自然也就不会给前端提供路由。

前端路由优缺点

  • 优点
    1)从性能和用户体验的层面来比较的话,后端路由每次访问一个新页面的时候都要向服务器发送请求,然后服务器再响应请求,这个过程肯定会有延迟。而前端路由在访问一个新页面的时候仅仅是变换了一下路径而已,没有了网络延迟,对于用户体验来说会有相当大的提升。
    2)在某些场合中,用ajax请求,可以让页面无刷新,页面变了但Url没有变化,用户复制到的地址不能反映这些变化,用前端路由做单页面网页就很好的解决了这个问题,即把变化反映在url中。
  • 缺点
    使用浏览器的前进,后退键的时候会重新发送请求,没有合理地利用缓存。(查资料做进一步了解)

四、Vue-router库

页面中所有的内容都是组件化的,只需要把路径跟组件对应,在页面中把组件渲染出来。
1.页面实现:在vue-router中, 它定义了两个标签 和来对应点击和显示部分。 就是定义页面中点击的部分, 定义显示部分。
2.js中配置路由:首先要定义route,一条路由的实现,他是一个对象,由path和component组成。

这里的两条路由,组成routes:

const routes = [
    {// 首页
        path: '/',
        component: () => import('src/pages/home/index.vue'),
    },
    {// 首页更多功能
        path: '/functionManage',
        component: () => import('src/pages/home/functionManage.vue'),
    },
]

创建router对路由进行管理,它是由构造函数 new vueRouter() 创建,接受routes 参数。
router.js文件中

const router = new VueRouter({
    routes,
})

配置完成后,把router 实例注入到 vue 根实例中。
main.js文件中

window.vm = new Vue({
    router,
})

执行过程:当用户点击 router-link 标签时,会去寻找它的 to 属性, 它的 to 属性和 js 中配置的路径{ path: '/home', component: Home} path 一一对应,从而找到了匹配的组件, 最后把组件渲染到 标签所在的地方。
前端路由是通过改变URL,在不重新请求页面的情况下,更新页面视图。

参考:

https://zhuanlan.zhihu.com/p/24814675
https://www.cnblogs.com/yuqing6/p/6731980.html
https://www.jianshu.com/p/d2aa8fb951e4
https://juejin.im/post/5b08c9ccf265da0dd527d98d

相关文章

  • 第三十一节:Vue路由:前端路由vs后端路由的了解

    1. 认识前端路由和后端路由 前端路由相对于后端路由而言的, 在理解前端路由之前先对于路由有一个基本的了解 路由:...

  • Vue前端路由

    1 - 后端路由和前端路由 路由是一个比较广义和抽象的概念,路由的本质就是对应关系,在开发中,路由分为:后端路由、...

  • vue - 路由模式

    1 路由的基本概念与原理 路由的本质就是对应关系; 在开发中, 路由分为前端路由和后端路由. 1.1 前端路由 概...

  • Vue3: 前端路由的概念和原理

    1、什么是路由 路由(英文:router)就是对应关系。路由分为两大类:① 后端路由② 前端路由 2、后端路由 后...

  • 路由

    1、路由的本质就是对应关系。 2、路由分为前端路由和后端路由。 3、后端路由根据不同的用户url请求,返回不同的资...

  • Vue-路由

    路由可以分为前端路由和后端路由 后端路由: 概念:根据不同的用户url请求,返回不同的内容 本质:URL请求地址和...

  • vue路由

    前端路由和后端路由,前端渲染和后端渲染 1. 后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地...

  • 探究vue-router的源码

    一个vue路由的工作流程 前端路由和后端路由的区别 后端路由输入url --> 请求发送到服务器 --> 服务...

  • 路由、前端路由和后端路由

    一、路由 简单来说,路由就是URL到函数的映射。在 Web 服务的程序中,不同路径对应着各自的处理逻辑,程序会把请...

  • JavaScript--路由

    1、路由 (扩展) 对应的开发者来说 路由是一个很重要的东西。(前端路由)(后端路由) 2、后端路由 根据对应的接...

网友评论

      本文标题:路由、前端路由和后端路由

      本文链接:https://www.haomeiwen.com/subject/kyxqsctx.html