1. 訪問網站的過程發(fā)生了是?
- 通過 網址
- 先去緩存中讀取文件來進行渲染
(沒有本地緩存僧凰,或第三方緩存)根據域名去解析獲得對應的IP拓劝,并與對應 IP 的服務器建立鏈接 - 然后訪問對應IP的硬件服務器上的Web服務器建立鏈接 (通過 TCP 做三次握手 )
- 握手成功后考赛,web服務器會返回給前端 頁面標簽一罩、地址、內容
- 前端拿到 資源 后會進行渲染
【注】網址包括:協(xié)議灯蝴、域名(主機)恢口、端口、路徑
2. Vue的兩種路由模式穷躁?
在vue-router路由對象中耕肩,路由有兩種模式:hash 和 history,而默認的是hash模式.
hash 路由
- onhashchange 事件问潭,可以在 windows 對象上監(jiān)聽這個事件:
windows.onhashchange = function(event){
console.log(event.oldURL, event.newURL);
let hash = location.hasg //通過location對象來獲取hash地址
console.log(hash) // #/notebooks/123456/list 地址從#號開始
}
因為hash發(fā)生變化的url都會被瀏覽器記錄下來猿诸,從而會發(fā)現瀏覽器的前進后退都可以用
history 路由
-
隨著 history api的到來,前端路由開始進化了狡忙,前面的hashchange梳虽,你只能改變#后面的url片段,而history api則給了前端完全的自由去枷,history api可以分為兩大部分怖辆,切換和修改是复、切換歷史狀態(tài)
包括 back,forward,go三個方法删顶,對應瀏覽器的前進,后退淑廊,跳轉操作逗余。很多小伙伴只知道瀏覽器有前進和后退,其實在前進后退上長按鼠標季惩,會彈出歷史記錄录粱,從而完成跳轉.
history.go(-2); //后退兩次
history.go(2);//前進兩次
history.back();//后退
history.forward();前進
修改歷史狀態(tài)
包括了pushState,replaceState兩個方法,這兩個方法接受三個參數:stateObj,title,url
history.pushState({color:'red','red','red'})
history.back();
通過pushstate把頁面的狀態(tài)保存在state對象中画拾,當頁面的url再變回這個url時啥繁,可以通過event.state取到這個state對象.
history 模式的補充
對于vue開發(fā)的單頁面應用,我們在切換不同的頁面的時候青抛,可以發(fā)現html永遠只有一個旗闽,這也真是稱之為單頁面的原因,而vue-router 默認 hash 模式 —— 使用 URL 的 hash 來模擬一個完整的 URL,于是當 URL 改變時适室,頁面不會重新加載嫡意。而當開啟history模式的時候,如果后端不進行任何處理捣辆,在Dev階段一切都是正常的蔬螟,可是打包之后,訪問路徑則會返回404汽畴,因此要在服務端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源旧巾,則應該返回同一個 index.html 頁面,這個頁面就是app 依賴的頁面整袁。