浅谈前端路由

简介: 浅谈前端路由

ce0ec526a0e10c2a67aa1990f871ea8.png

前言

在浏览器中,路由可以简单理解为请求地址,实际上在早些时候,只有后端路由,虽然前端的路由和后端的路由在实现技术上不一样,但是原理都是一样的,都是通过解析路径来进行页面响应,对于 Web 开发来说,路由的实质是 URL 到对应的处理程序的映射

前端路由的使用场景

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

前端路由的优缺点

优点

  • 从性能和用户体验的层面来比较的话,后端路由每次访问一个新页面的时候都要向服务器发送请求,然后服务器再响应请求,这个过程肯定会有延迟。而前端路由在访问一个新页面的时候仅仅是变换了一下路径而已,没有了网络延迟,对于用户体验来说会有相当大的提升

缺点

使用浏览器的前进,后退键的时候会重新发送请求,没有合理地利用缓存

前端路由的分类

前端路由根据实现方式的不同,可以分为 Hash 路由History 路由

Hash 路由

一个 URI 的组成如下所示。其中的 fragment 部分就是 Hash 路由所读取的内容

foo://example.com:8042/over/there?name=ferret#nose
     _/   ______________/_________/ _________/ __/
      |           |            |            |        |
   scheme     authority       path        query   fragment
      |   _____________________|__
     / \ /                        \
     urn:example:animal:ferret:nose
复制代码

fragment 本质是用来标识次级资源,fragment 有以下特点:

  • 修改 fragment 的内容不会触发网页重载。
  • 修改 fragment 的内容会改变浏览器的历史记录。
  • 修改 fragment 的内容会触发浏览器的 onhashchange 事件。

基于 fragment 的以上特点,可实现基于 Hash 的前端路由。

实现原理

浏览器提供了haschange事件来监听 hash 的变化,我们可以通过监听 hash 的变化,解析 hash 的值来实现页面的切换

window.addEventListener("hashchange", (e) => {
    // hash 变化更新页面
    // ...
})
复制代码

优缺点

Hash 路由由于通过监听 hash 变化实现,所以有以下优势和不足:

  • 优点

兼容性最佳,无需服务端配置

  • 缺点

服务端无法获取 hash 部分内容,和锚点功能冲突,影响 SEO

History 路由

Hash 路由是一个相对“Hack”的方式,利用了 fragment 来实现路由功能。而 History 路由则是通过浏览器原生提供的操作 History 的能力来实现的路由功能。

实现原理

History 路由核心主要依赖 History API 里的两个方法和一个事件,其中两个方法用于操作浏览器的历史记录,事件用于监听历史记录的切换:

方法:

  • history.pushState:将给定的 Data 添加到当前标签页的历史记录栈中
  • history.replaceState:将给定的 Data 更新到历史记录栈中最新的一条记录中

事件:

  • popstate:监听历史记录的变化
window.addEventListener("popstate", (e) => {
    // state 变化更新页面
    // ...
});
复制代码

优缺点

  • 优点

服务端可以获取完整的链接和参数,前端监控,SEO相对友好

  • 缺点

兼容性稍差,需要服务端额外配置

相关文章
|
6月前
|
移动开发 前端开发 API
深入理解前端路由:构建现代 Web 应用的基石(上)
深入理解前端路由:构建现代 Web 应用的基石(上)
深入理解前端路由:构建现代 Web 应用的基石(上)
|
6月前
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
500 0
|
3月前
|
JavaScript 前端开发 开发者
Vue.js 框架大揭秘:响应式系统、组件化与路由管理,震撼你的前端世界!
【8月更文挑战第27天】Vue.js是一款备受欢迎的前端JavaScript框架,以简洁、灵活和高效著称。本文将从三个方面深入探讨Vue.js:响应式系统、组件化及路由管理。响应式系统为Vue.js的核心特性,能自动追踪数据变动并更新视图。例如,通过简单示例代码展示其响应式特性:`{{ message }}`,当`message`值改变,页面随之自动更新。此外,Vue.js支持组件化设计,允许将复杂界面拆分为独立且可复用的组件,提高代码可维护性和扩展性。如创建一个包含标题与内容的简单组件,并在其他页面中重复利用。
78 3
|
2月前
|
存储 JavaScript 前端开发
前端 vue:路由的高级使用
前端 vue:路由的高级使用
|
1月前
|
JavaScript 前端开发 API
前端技术分享:Vue.js 动态路由与守卫
【10月更文挑战第1天】前端技术分享:Vue.js 动态路由与守卫
|
2月前
|
资源调度 JavaScript 前端开发
前端vue:路由的基本使用
前端vue:路由的基本使用
|
1月前
|
JavaScript 前端开发 应用服务中间件
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
26 0
|
2月前
|
移动开发 前端开发 JavaScript
浅谈前端路由原理hash和history
该文章详细解析了前端路由的两种模式——Hash模式与History模式的工作原理及其实现方式,并通过实例代码展示了如何在实际项目中运用这两种路由模式。
|
2月前
|
移动开发 缓存 前端开发
构建高效的前端路由系统:从原理到实践
在现代Web开发中,前端路由系统已成为构建单页面应用(SPA)不可或缺的核心技术之一。不同于传统服务器渲染的多页面应用,SPA通过前端路由技术实现了页面的局部刷新与无缝导航,极大地提升了用户体验。本文将深入剖析前端路由的工作原理,包括Hash模式与History模式的实现差异,并通过实战演示如何在Vue.js框架中构建一个高效、可维护的前端路由系统。我们还将探讨如何优化路由加载性能,确保应用在不同网络环境下的流畅运行。本文不仅适合前端开发者深入了解前端路由的奥秘,也为后端转前端或初学者提供了从零到一的实战指南。
|
6月前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
333 0
下一篇
无影云桌面