前言:網絡上,不少介紹前端路由實現的文章,以及路由原理的文章。可是最近在面試過程當中,我發現,全部面試者都能講清楚路由的技術實現,可是卻對每一種技術實現的適用場景不理解。好比
hash
路由,不少人的回答是hash
路由會帶有一個#
號很差看,因此用了history
路由。甚至我出去面試的時候,也有一些面試官這麼認爲(T_T)。任何技術方案的產生都是爲了解決某些特定問題的。hash
和history
也不例外。html
hash
:多是大多數人瞭解的模式,主要是基於錨點的原理實現。簡單易用browser
:即便用html5
標準中的history api
經過監聽popstate
事件來對dom
進行操做。每次路由變化都會引發重定向memory
:這種實現是在內存中維護一個堆棧用於管理訪問歷史的方式,比較複雜。在早起移動端使用比較多。實現麻煩,問題也較多。如今不多有使用。RN
在使用這種路由模式static
:主要用於ssr
。須要後端去管理路由query
傳參優勢前端
ie8
)hash
的路由實現ajax
請求之外,不會發起其餘請求缺點html5
hash
部份內容,致使後臺沒法取得url
中的數據,典型的例子就是微信公衆號的oauth
驗證優勢react
url
中的參數。後端能夠拿到這部分數據browser
的路由實現history.state
來獲取當前url
對應的狀態信息缺點android
hash
路由(只兼容到IE10
)html
文檔優勢面試
缺點ajax
memory
路由的實現(react-router
提供了memory
實現)android
設備的backbutton
static
路由 優缺點(該路由方式主要用於ssr
。不作比較。)hash模式適用場景:後端
oauth
)hybrid app
須要將前端資源打包在應用內,由於html
的域在file://
下,因此不能發生重定向history模式適用場景:api
history.state
)獲取路由狀態memory模式適用場景:前端框架