前端路由 & 实现原理

2019-10-18  本文已影响0人  糕糕AA

前端路由

后端路由:又称服务器路由,服务器接收前端发来的http请求后,会根据url找到相应的映射函数,然后执行函数,并将返回值发回给客户端。对于静态资源来说,映射函数就是一个文件读取操作;对于动态资源,映射函数可能是一个数据库读取操作,或者是数据处理操作;根据读取的数据,在服务端使用相应的模板来渲染页面,再返回渲染完毕的页面【⚠️这是早期的做法】

如访问http://xxx/about,服务器收到后,解析出/about,寻找到对应的逻辑,程序吧请求交给对应处理逻辑,完成一次路由分发。

前端路由:路由的映射函数;当访问不同的路径,会显示不同的页面组件。控制页面跳转

单页应用路由的特点:通过改变url,不会向后端发送新的请求,更新页面视图,所有页面均在客户端渲染

缺点:使用前进后退时会重新发请求,没有合理利用缓存。

- hash & history 前端路由实现方式

更新视图但不重新请求页面”是前端路由原理的核心

模式参数:

vue-router中通过mode来控制路由的实现模式

hash模式:

setupListeners () {
     window.addEventListener('hashchange', () => {
     if (!ensureSlash()) {
     return
     }
     this.transitionTo(getHash(), route => {
     replaceHash(route.fullPath) // 相当于调用了replaceHash
     })
     })
    }

history模式:

History interface是浏览器历史记录栈提供的接口,通过back(), forward(), go()等方法,我们可以读取浏览器历史记录栈的信息,进行各种跳转操作。

新的方法:pushState(), replaceState()对浏览器历史记录栈进行修改:

window.history.pushState(stateObject, title, URL)
window.history.replaceState(stateObject, title, URL)

代码结构以及更新视图的逻辑与hash模式基本类似,只不过将对window.location.hash直接进行赋值window.location.replace()改为了调用history.pushState()history.replaceState()方法。

abstract模式:

原理为用一个数组stack模拟出浏览器历史记录栈的功能。

history VS hash

上一篇下一篇

猜你喜欢

热点阅读