1.強制緩存和協商緩存?
參考鏈接:https://blog.csdn.net/zl399615007/article/details/84534884
瀏覽器在請求某一資源時,會先獲取該資源緩存的header信息,判斷是否命中強緩存(cache-control和expires信息),若命中直接從緩存中獲取資源信息,包括緩存header信息,本次請求就不會與服務器進行通信。
如果沒有命中強緩存,瀏覽器會發送請求到服務器,請求會攜帶第一次返回的有關緩存的header字段信息(Last-Modifued/If-Modified-Since和Etag/If-None-Match),由服務器根據header信息來比對結果是否協商緩存命中。若命中,則服務器返回新的響應header信息更新緩存中的對應header信息,但是不返回資源內容,它會告知瀏覽器可以直接從緩存獲取;否則返回最新的資源內容。
強緩存與協商緩存的區別:
緩存 | 獲取資源形式 | 狀態嗎 | 發送請求到服務器 |
強緩存 | 從緩存取 | 200(from cache) | 否,直接從緩存取 |
協商緩存 | 從緩存取 | 304(not modified) | 是,通過服務器告知瀏覽器緩存是否可用 |
2.cookies如何防止被惡意讀取?如果cookies被瀏覽器禁用,怎麼辦?
加上http-only屬性,這樣可以避免js修改cookies中的值並進行修改,有效防止Xss攻擊。
在瀏覽器中可以設置,放開對cookies的禁用,如果不能使用cookies和後端進行交互的話。也就是前端和後端不能進行正常的交互,不能攜帶交互信息,那麼可以使用token進行交互。
3.什麼是棧,隊列,堆?
隊列:先進先出
棧:後進後出
堆:
堆棧:
4.簡述vue的工作流程?從vue初始化到頁面渲染完成大致都經歷了哪些過程?
答案一:
回過頭來看,這裏的渲染邏輯並不是特別複雜,核心關鍵的幾步流程還是非常清晰的:
- new Vue,執行初始化
- 掛載
$mount
方法,通過自定義Render方法、template、el等生成Render函數 - 通過Watcher監聽數據的變化
- 當數據發生變化時,Render函數執行生成VNode對象
- 通過patch方法,對比新舊VNode對象,通過DOM Diff算法,添加、修改、刪除真正的DOM元素
至此,整個new Vue的渲染過程完畢。
答案二:
1.構造vue,將template元素掛載($mount)到vue,執行——init
2._init執行了初始化生命週期、事件envent、render、beforeCreate鉤子函數、initState:初始化狀態、callHook(vm, 'created'):created鉤子函數
3.然後$mount掛載
4.將template編譯成render function,過程分三步,parse將temp生成ast
optimize diff算法
跳過存儲的樹中的靜態節點,也就是沒有變化的節點,generate是將AST語法樹轉化成render funtion字符串
5.如果第二次渲染:optimize的時候Diff算法比較原vnode和newVnode的差異,以最小的代價重新渲染頁面
6.具體vnode是如何轉爲html的:https://blog.csdn.net/s1879046/article/details/82979954,,,遍歷節點替換實體dom的節點
5.vue的mixin和component的區別?
6.webpack和gulp之間的區別?
7.webpack打包的原理?
8.說下在項目中如何對webpack進行優化的?
9.webpack可以配置兩個入口文件嗎?怎麼配置?
入口是 Webpack 進行構建的起點,Webpack 在構建過程中從入口文件開始,遞歸地編譯模塊,並分析模塊間的依賴關係,最終得出依賴圖。Webpack 依據該依賴圖對模塊進行組裝,輸出到最終的 bundle 文件中。
我們可以在 Webpack 的配置文件中配置 entry 屬性,來指定入口文件,入口文件可以是一個也可以指定多個。
我們來看一個例子:
// Webpack .config.js
module.exports = {
entry: './src/app.js'
};
配置多個入口的場景常見於多頁應用中。如果配置多個入口可以這樣:
// Webpack .config.js
module.exports = {
entry: {
pageOne: './src/pageOne/app.js',
pageTwo: './src/pageTwo/app.js'
}
};
輸出
配置 output 選項可以指示 Webpack 如何去輸出、在哪裏輸出我們的靜態資源文件。
我們通過一個例子來看一下 output 如何使用:
// Webpack .config.js
module.exports = {
output: {
filename: 'bundle.js',
path: './dist'
}
};
上例中,我們指示 Webpack 最終的輸出文件名爲 bundle.js
,輸出的目錄爲 ./dist
。
10.AMD,CMD,commonjs和es6的module有什麼異同?
11.vue中的插槽slot和scope-slot作用域插槽之間的區別?