hash路由和history路由

135 阅读1分钟

区别: 1.直观区别:hash路由带#号,history路由不带#号。

2.兼容性:hash路由支持低版本的浏览器,而history路由是HTML5新增的API。

3.实现原理不同:

hash: 当页面中的 hash 发生变化时,会触发hashChange事件,通过监听hashChange事件进行页面定位,渲染不同的内容;

history: 利用HTML5 History API 提供的 history.pushState方法或者 history.replaceState 方法,监听popstate事件,需要客户端和服务端共同的支持

Hash 路由:

URL 示例:example.com/#/path

使用 URL 中的哈希(#)部分来模拟路由。 哈希部分的改变不会触发页面刷新,因此称为前端路由。 在单页应用中,前端路由器会监听 URL 的哈希变化,并根据不同的哈希值来渲染相应的组件或页面内容。 哈希路由可以通过修改 location.hash 的方式来改变当前的路由。 优点:兼容性好,可以在不支持 HTML5 History API 的浏览器中正常运行。 缺点:URL 中带有哈希部分,不够美观,且哈希部分对搜索引擎的抓取和索引不友好。

History 路由:

URL 示例:example.com/path

使用 HTML5 的 History API 来管理路由。 通过修改浏览器的历史记录状态,实现前端路由。 可以使用 history.pushState() 和 history.replaceState() 方法来改变当前的路由状态,而不会触发页面刷新。 前端路由器会监听 URL 的变化,并根据不同的路由状态来渲染对应的组件或页面内容。 优点:URL 更加美观,不带有哈希部分,对搜索引擎友好。 缺点:需要浏览器支持 HTML5 History API,不兼容旧版本的浏览器。