Vue-router中的history模式和hash模式


  還記得在我們從零開始搭建一個Vue-cli3.0項目時,預設置中出現過這樣一條詢問:

  

  即是否選擇歷史模式,當時我們很堅決地選了否,那么哈希模式和歷史模式究竟有什么區別,今天我們來一探究竟。

  

  哈希模式(hash mode)

  這是開發中的默認模式,在url中永遠帶着#號,在瀏覽器方面其支持度極佳,甚至兼容低版本的ie瀏覽器。說到這里就不得不說一下前端路由的原理:window是可以監聽到哈希值的變化的(onhashchage事件),這就意味着:當url中的哈希值發生了變化,無需發起http請求,window也可以監聽到這種變化,並按需加載前端的代碼塊。哈希模式也是當下單頁面應用的標配,所謂前端路由的強大之處也就在這里:路由分發不需要服務器來做,前端自己就可以完成。網易雲音樂的首頁也是用的哈希模式:

  

 

  歷史模式(history mode)

  在url中不帶#號,用的是傳統的路由分發模式,即當用戶輸入一個url時,是由服務器在接受用戶的這個輸入請求,並由服務器解析url的路徑然后做相應邏輯處理。如果要做到改變url但又不刷新頁面的潮流效果,就需要前端用上pushState和replaceState兩個H5的api,來把url替換的同時又不刷新頁面,但需要后端人員去配置url重定向的問題,不然在訪問二級頁面時,做刷新操作會報404的錯誤。這和哈希天生就不會刷新頁面的特性不同,歷史模式來做這件事屬於一種“障眼法”,或者說是“老技術干新活”,又廢又麻煩。

 

  總結及個人觀點:

  “帶#號不美觀”這個說法,我個人是不太同意的,實際上不管帶不帶#號,真正願意去記住你的域名,直接在地址欄輸入的用戶有多少呢?比如你想打開騰訊視頻,你記得域名是多少嗎?打開vue.js官網,打開mdn官網,他們的域名你是否又能章口就萊?其實絕大部分人都不關心這個,要么從書簽欄進入,要么從百度搜索官網名字進入。今時今日我們要打某人的電話,不會手動地去數字鍵盤一個個敲電話號碼,而是直接從電話薄找,甚至直接通過語音助手撥打。人是很懶的,前端路由是潮流。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM