前端問題彙總-第八篇

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初始化到頁面渲染完成大致都經歷了哪些過程?

答案一:

回過頭來看,這裏的渲染邏輯並不是特別複雜,核心關鍵的幾步流程還是非常清晰的:

  1. new Vue,執行初始化
  2. 掛載$mount方法,通過自定義Render方法、template、el等生成Render函數
  3. 通過Watcher監聽數據的變化
  4. 當數據發生變化時,Render函數執行生成VNode對象
  5. 通過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作用域插槽之間的區別?

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章