Hash路由、History路由原理及优缺点

Hash路由

原理:

主要基于浏览器提供的window.location.hash属性。

  1. 初始化时:
    浏览器地址栏中的URL会包含一个"#"符号及其后面的部分,称为"hash"
    前端程序会监听window.onhashchange事件,在hash发生变化时触发回调函数。
  2. 路由切换时:
    当用户点击页面上的链接或执行编程式导航时,前端程序会修改window.location.hash的值。
    浏览器会将新的hash值添加到URL中,但不会导致整个页面重新加载。
    前端程序监听到window.onhashchange事件,根据新的hash值执行相应的业务逻辑,如渲染不同的视图组件。
  3. 刷新或直接访问时:
    当用户刷新页面或直接访问带有hash的URL时,浏览器会保留hash部分,不会导致整个页面重新加载。
    前端程序可以根据当前的hash值执行相应的业务逻辑,渲染正确的视图组件。
优点:
  • 简单易实现,不需要服务端配合。
  • 不会导致整个页面重新加载,提高用户体验。
  • 对于不支持HTML5 History API的旧版浏览器也能很好地运行。
缺点:
  • hash部分不会被发送到服务器,不利于SEO。
  • URL中的hash部分不太美观,不利于用户体验。
  • 无法直接通过URL访问某个具体的路由页面。

History路由

原理:

History路由是基于HTML5提供的History API实现的前端路由方式。

  1. 初始化时:
    前端程序会注册window.popstate事件监听器,当浏览器历史记录发生变化时会触发该事件。
    前端程序会调用history.pushState()history.replaceState()方法,在浏览器历史记录中添加或修改当前的URL。
  2. 路由切换时:
    当用户点击页面上的链接或执行编程式导航时,前端程序会调用history.pushState()方法,在浏览器历史记录中添加新的URL。
    浏览器不会导致整个页面重新加载,只会更新地址栏中的URL。
    前端程序监听到window.popstate事件,根据当前的URL执行相应的业务逻辑,如渲染不同的视图组件。
  3. 刷新或直接访问时:
    当用户刷新页面或直接访问带有History路由的URL时,浏览器会发送完整的URL到服务器。
    服务器返回的HTML页面中包含前端程序,前端程序会根据当前的URL执行相应的业务逻辑,渲染正确的视图组件。
优点:
  • URL美观,有利于SEO和用户体验。
  • 可以直接通过URL访问某个具体的路由页面。
  • 能够更好地模拟传统的服务端路由,提高应用的整体体验。
缺点:
  • 需要服务端配合,确保所有路由都能正确返回HTML页面。
  • 不支持HTML5 History API的旧版浏览器无法正常使用。

使用History路由注意点:为了解决History路由在旧版浏览器上的兼容性问题,前端框架通常会提供降级方案,比如在不支持History API的浏览器上自动切换到Hash路由。

相关推荐

  1. HashHistory原理优缺点

    2024-06-14 03:04:03       10 阅读
  2. 浅谈前端原理hashhistory

    2024-06-14 03:04:03       22 阅读
  3. hash history 的区别

    2024-06-14 03:04:03       32 阅读
  4. Vue的实现:hash模式 和 history模式原理

    2024-06-14 03:04:03       32 阅读
  5. Vue hashhistory两种的区别

    2024-06-14 03:04:03       30 阅读
  6. vue3 hashhistory模式配置

    2024-06-14 03:04:03       16 阅读
  7. hashhistory模式的区别

    2024-06-14 03:04:03       13 阅读
  8. Vue Router hashhistory模式

    2024-06-14 03:04:03       12 阅读
  9. hashhistory模式的区别

    2024-06-14 03:04:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 03:04:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 03:04:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 03:04:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 03:04:03       20 阅读

热门阅读

  1. mysql和postgreSQL的区别

    2024-06-14 03:04:03       4 阅读
  2. RealAI-图像算法岗-面经

    2024-06-14 03:04:03       6 阅读
  3. 5.2 Python 名称空间与作用域

    2024-06-14 03:04:03       6 阅读
  4. Kotlin 的锁和多线程同步

    2024-06-14 03:04:03       5 阅读
  5. kotlin get() 与 set()

    2024-06-14 03:04:03       9 阅读
  6. RK3588开发笔记-100M网口自协商成1000M网口

    2024-06-14 03:04:03       9 阅读
  7. RedisConfig配置

    2024-06-14 03:04:03       8 阅读