1.什麼是 mvvm? mvvm 和 mvc 區別?

MVVM 是 Model-View-ViewModel 的縮寫。mvvm 是一種設計思想。
Model 層代表資料模型,View 代表 UI 元件。

區別:主要就是 mvc 中 Controller 演變成 mvvm 中的 viewModel。mvvm 主要解決了 mvc 中大量的 DOM 操作使頁面渲染效能降低,載入速度變慢,影響使用者體驗。和當 Model 頻繁發生變化,開發者需要主動更新到 View

2.為什麼vue中data是一個函式?

當data是一個函式的時候,每一個例項的data屬性都是獨立的,不會相互影響

3.雙向繫結的原理是什麼?

採用資料劫持結合釋出者-訂閱者模式的方式,通過 Object.defineProperty()來劫持各個屬性的 setter,getter,在資料變動時釋出訊息給訂閱者,觸發相應的監聽回撥。

4.v-moudel原理是什麼?

簡單描述就是view層輸入值影響data的屬性值,data屬性值發生改變會更新view層的數值變化。

5.nextTick的工作原理是什麼?

在下次 DOM 更新迴圈結束之後執行延遲迴調。在修改資料之後立即使用這個方法,獲取更新後的 DOM

6.computed 和 watch 的相同和不同之處 ?

相同點:
computed 和 watch 都是以vue的依賴追蹤為基礎的,
都是希望當依賴發生改變的時候,被依賴的資料根據預定好的函式發生改變。
不同點:
watch 監聽,一般是監聽一個數據,從而影響多個數據
computed 計算屬性, 一般是計算一個屬性,這個屬性受多個數據影響

7.v-if和v-show的相同點和共同點,專案中如何選擇性使用?

相同點:兩個都是讓元素不可見

不同點:v-show控制的時元素的display屬性,無論初始條件是否成立,都會渲染標籤。

v-if只有在條件成立時才渲染為真實的標籤,條件為假,不會去渲染標籤

頻繁切換時,使用v-show
多路分支,選擇v-if

8.vue router的原理是什麼?

更新檢視但不重新請求頁面

9.vuex 原理

vuex 僅僅是作為 vue 的一個外掛而存在, 只能使用在 vue 上,很大的程度是因為其高度依賴於 vue 的 computed 依賴檢測系統以及其外掛系統,vuex 中的 store 本質就是沒有 template 的隱藏著的 vue 元件;

10.為什麼V-for和v-if不能同時用?

v-for比v-if優先,如果每一次都需要遍歷整個陣列,將會影響速度,尤其是當之需要渲染很小一部分的時候。

如果連用的話會把 v-if 給每個元素都新增一下,會造成效能問題。

11.v-for中key的作用是什麼?

vue中列表迴圈需加:key="唯一標識" ,因為vue元件高度複用增加Key可以標識元件的唯一性,為了更好地區別各個元件 key的作用主要是為了高效的更新虛擬DOM

12.談談你對keep-alive的瞭解?

keep-alive 是 Vue 內建的一個元件,可以使被包含的元件保留狀態,避免重新渲染

13.Vue怎麼做效能優化?

一.編碼優化

1. 將所有的資料都放在data中,data中的教據都會增加getter和setter,會收集對應的watcher
2. vue在v-for時給每項元素繫結事件需要用事件代理
3. spa頁面採用keep-alive快取元件
4. 拆分元件(提高複用性.增加程式碼的可維護性,減少不必要的渲染)
5. vif當值為false時內部指令不會執行,具有阻斷功能,很多惆況下使用v-if代v.show
6. key保證唯一性(預設vue會採用就地複用策略}
7.object.freeze 凍結教據(就不會getter和setter)
8. 合理使用路由懶載入、非同步元件
9. 儘量採用runtime執行時版本
10. 教據持久化的問題(防抖、節流)

2.Vue載入效能優化

1.使用第三方框架,按照按需載入匯入
2.滾動視覺化區域懶載入
3.圖片懶載入

3.打包優化

1.使用 cdn 的方式載入第三方模組
2.多執行緒打包 happypack
3.splitChunks 抽離公共檔案
4.sour ceMap 生成

4.快取/壓縮

1.客戶端快取 or 服務端快取
2.服務端 gzip 壓縮