功能差异
- Vue-Router
工作模式主要分为两种, 一种就是history模式, 一种就是hash模式。
- history 模式使用 pushState(/url) 进行路由更新,支持静态跳转,页面不会重新加载。
- 利用 diff 算法实现按需加载,减少 DOM 操作,适用于路由跳转或同一页面跳转。
- 支持异步加载,例如,使用 this.$nextTick() 在跳转后获取新的 URL 。
- location.href=/url
- 直接设置新的 URL ,触发页面重新加载。
- 适用于不同页面间的跳转,不涉及路由管理。
性能对比
- Vue-Router
- 由于使用 pushState 和 diff 算法,减少了不必要的 DOM 操作,提高了页面响应速度。
- 支持在同一页面内进行平滑跳转,减少了重定向的开销。
- location.href
- 每次跳转都会导致页面重新加载,若频繁跳转时会影响性能。
- 运用于简单的页面跳转,不涉及复杂的路由逻辑。
结论
Vue-Router 提供了更高级灵活的跳转功能,无刷新页面。静态跳转。特别适合需要处理复杂路由和频繁页面跳转的场景。
location.href 会刷新页面,适用于简单的页面间跳转。
Vue-Router两种模式
-
hash模式
在 URL 中使用 # 符号来模拟路由状态的改变。当 URL 中的 # 后面的部分发生变化时,浏览器不会向服务器发送请求,而是触发 hashchange 事件,Vue Router 监听这个事件来更新页面。
-
history模式
主要通过 HTML5 提供的 History API 来实现路由切换,不再使用 # 符号。当用户点击链接时,浏览器向服务器发送请求,服务器根据请求的 URL 返回相应的页面。前端通过 History API 的 pushState() 和 replaceState() 方法来改变 URL,但不向服务器发送请求。
两种模的优缺点
-
history模式
优点主要是 url 没有 #, 相对来说比较美观。 缺点是上线后需要服务端配合我们处理路径, 否则的话刷新会有 404。
在 Vue2 中, 我们只需要配置一下 mode: 'history' 即可。
在 Vue3 中, 需要我们从 Vue-Router 中引出一个createWebHistory, 在创建路由器的时候, 指定 history: createWebHistory()。
我们看一下, 我们切换的时候, 是不带 # 的:
-
hash模式
优点就是兼容性会比较好, 项目上线, 也不再需要服务端处理路径问题。 缺点就是带有 # , 不是很美观, 在 SEO 优化方面相对较差。
我们来写一个哈希模式看一下
需要从 Vue-Router 中引出一个 createWebHashHistory。
重新启动项目, 看看路径的变化。