如何看待history和hash的區別

如何看待前端路由?路由的做用是什麼?

在我看來路由有兩個方面的做用:html

  • 經過路由變化,實現頁面之間的跳轉和切換
  • 能夠經過路由傳遞參數(query)

路由的種類

路由的種類能夠分爲如下四種前端

  • hash 主要是基於錨點實現
  • browser 使用的是html5中的history 這個api來實現的,每次路由發生變化都會重定向
  • memory 這種實現是在內中維護一個堆棧管理歷史記錄,因爲比較複雜,如今通常都不用了
  • static 是後端管理路由的模式

只介紹前端經常使用的二者路由方式

hash路由

hash路由的優勢html5

  • 兼容性比較好,兼容性達到了ie8
  • 絕大數框架的框架都基本支持hash路由方式
  • 除了會發送ajax和資源加載以外不會發送其餘請求
  • 不須要在服務端進行任何設置和開發

hash路由的缺點ajax

  • 服務端沒法準確捕獲路由的信息
  • 對於須要錨點功能的需求會與當前路由機制發生衝突
  • 對於須要重定向的操做,後段沒法獲取url所有內容,致使後臺沒法獲得url數據,典型的例子就是微信公衆號的oauth驗證。

browser路由

browser路由的優勢後端

  • 當發生路由重定向時不會丟失url數據 ,後端也能夠拿到這個數據
  • 固然,絕大多數框架同樣實現了 browser路由的方式
  • 後端能夠準確追蹤到路由
  • 可使用history.state獲取路由的信息

使用browser的缺點api

  • 兼容性不如hash 。兼容性只到ie10
  • 須要後端支持,每次返回html文檔
相關文章
相關標籤/搜索