前端路由在很多開源的js類庫框架中都得到支持,如angularJS,Backbone,Reactjs等等。這篇文章主要和大家談談什么是前端路由,以及它的使用場景及優缺點
1.什么是路由
簡單舉例說明,假如我們有一台提供 Web 服務的服務器的網絡地址是:10.0.0.1,而該 Web 服務又提供了三個可供用戶訪問的頁面,其頁面 URI 分別是:
http://10.0.0.1/
http://10.0.0.1/about
http://10.0.0.1/concat
那么其路徑就分別是 /,/about,/concat。
當用戶使用 http://10.0.0.1/about 來訪問該頁面時,Web 服務會接收到這個請求,然后會解析 URL 中的路徑 /about,在 Web 服務的程序中,該路徑對應着相應的處理邏輯,程序會把請求交給路徑所對應的處理邏輯,這樣就完成了一次「路由分發」,這個分發就是通過「路由」來完成的。
以前路由都是后台做的,通過用戶請求的url導航到具體的html頁面,前端路由就是通過配置js文件,把這個工作拿到前端來做。
簡單的說,路由是根據不同的 url 地址展示不同的內容或頁面
2.前端路由
前端的路由和后端的路由在實現技術上不一樣,但是原理都是一樣的。在 HTML5 的 history API 出現之前,前端的路由都是通過 hash 來實現的,hash 能兼容低版本的瀏覽器。如果我們把上面例子中提到的 3 個頁面用 hash 來實現的話,它的 URI 規則中需要帶上 #。
1 http://10.0.0.1/ 2 http://10.0.0.1/#/about 3 http://10.0.0.1/#/concat
Web 服務並不會解析 hash,也就是說 # 后的內容 Web 服務都會自動忽略,但是 JavaScript 是可以通過 window.location.hash 讀取到的,讀取到路徑加以解析之后就可以響應不同路徑的邏輯處理。
history 是 HTML5 才有的新 API,可以用來操作瀏覽器的 session history。基於 history 來實現的路由可以和最初的例子中提到的路徑規則一樣。
1 http://10.0.0.1/ 2 http://10.0.0.1/about 3 http://10.0.0.1/concat
具體如何實現前端路由將在后面的文章中介紹。
3.前端路由的使用場景?
前端路由更多用在單頁應用上, 也就是SPA, 因為單頁應用, 基本上都是前后端分離的, 后端自然也就不會給前端提供路由。
4.前端路由優缺點
優點:
1.從性能和用戶體驗的層面來比較的話,后端路由每次訪問一個新頁面的時候都要向服務器發送請求,然后服務器再響應請求,這個過程肯定會有延遲。而前端路由在訪問一個新頁面的時候僅僅是變換了一下路徑而已,沒有了網絡延遲,對於用戶體驗來說會有相當大的提升。
2.在某些場合中,用ajax請求,可以讓頁面無刷新,頁面變了但Url沒有變化,用戶就不能復制到想要的地址,用前端路由做單頁面網頁就很好的解決了這個問題
缺點:
使用瀏覽器的前進,后退鍵的時候會重新發送請求,沒有合理地利用緩存,