## jQuery 和框架的區別
- 數據和視圖的分離,解耦(開放封閉原則)
- 以數據驅動視圖,只關心數據變化,DOM 操作被封裝
## MVC
全稱是 Model View Controller,是模型 (model)-視圖 (view)-控制器 (controller) 的縮寫。它表示的是一種客戶端軟件開發框架。
**特點:單項通訊**

- 視圖(View):用戶界面。View 傳送指令到 Controller
- 控制器(Controller):業務邏輯。Controller 完成業務邏輯后,要求 Model 改變狀態
- 模型(Model):數據保存。Model將新的數據發送到 View,用戶得到反饋
**MVC 的缺點**
雖然 View 和 View Controller 是技術上不同的組件,但它們幾乎總是手牽手在一起,成對的。在典型的 MVC 應用里,許多邏輯被放在 View Controller 里。它們中的一些確實屬于 View Controller,但更多的是所謂的“表示邏輯(presentation logic)”,以 MVVM 屬術語來說,就是那些將 Model 數據轉換為 View 可以呈現的東西的事情,例如將一個 `NSDate` 轉換為一個格式化過的 `NSString`。
我們的圖解里缺少某些東西,那些使我們可以把所有表示邏輯放進去的東西。我們打算將其稱為 “View Model” —— 它位于 View/Controller 與 Model 之間:

這個圖解準確地描述了什么是 MVVM:一個 MVC 的增強版,我們正式連接了視圖和控制器,并將表示邏輯從 Controller 移出放到一個新的對象里,即 View Model。MVVM 聽起來很復雜,但它本質上就是一個精心優化的 MVC 架構
## MVP
MVP 是從經典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負責邏輯的處理,Model提供數據,View負 責顯示。
MVP與MVC有著一個重大的區別:在MVP中View并不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進行的,所有的交互都發生在Presenter內部,而在MVC中View會從直接Model中讀取數據而不是通過 Controller。

在MVP里,Presenter完全把Model和View進行了分離,主要的程序邏輯在Presenter里實現。而且,Presenter與具體的 View是沒有直接關聯的,而是通過定義好的接口進行交互,從而使得在變更View時候可以保持Presenter的不變,即重用!
## MVVM
### 概念
是 Model-View-ViewModel 的簡寫,MVVM 是一個相當新的架構。
MVVM 在使用當中,通常還會利用雙向綁定技術,使得 Model 變化時,ViewModel 會自動更新,而 ViewModel 變化時,View 也會自動變化。
MVVM 基本上就是 MVC 的改進版,所以很容易就能看到它如何被整合到現有使用典型 MVC 架構的應用中。
### 優缺點
優點:
1. 方便測試。在MVC下,Controller基本是無法測試的,里面混雜了個各種邏輯,而且分散在不同的地方。有了MVVM我們就可以測試里面的viewModel,來驗證我們的處理結果對不對。
2. 便于代碼的移植。可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯。
3. 獨立開發。開發人員可以專注于業務邏輯和數據的開發(ViewModel),設計人員可以專注于頁面設計
缺點:
1. 對于交互很少的webapp,MVVM略顯沉重
2. 對于大型webapp,所有邏輯和數據都在ViewModel里,ViewModel會越來越復雜。
### MVVM 框架的三大要素
- 響應式:vue如何監聽到 data 的每個屬性變化?
- 模板引擎:vue 的模板如何被解析,指令如何處理?
- 渲染:vue 的模板如何被渲染成 html ?以及渲染過程
- 說明
- CSS與HTML
- BFC的特性及其常見應用
- CSS深入理解之margin
- CSS深入理解之line-height
- CSS盒模型相關知識
- CSS知識總結
- HTML知識總結
- 三欄布局五種方式
- JavaScript內置對象
- 1.循環
- 2.數組方法對比
- 3.字符串實用常操紀要
- JavaScript核心
- var、let、const定義變量
- this 的指向問題詳解
- 箭頭函數
- ES6部分知識歸納
- ES6的Class
- Promise和Async/await
- 面向對象的概念及JS中的表現
- 創建對象的九種方式
- JS的繼承
- 閉包總結
- 構造函數與作用域
- 原型與原型鏈
- 函數的四種調用模式
- apply、call、bind詳解
- JavaScript應用
- 1.JavaScript實現深拷貝與淺拷貝
- 2.函數防抖與節流
- 3.無阻塞腳本加載技術
- DOM
- 如何寫出高性能DOM?
- 事件探秘
- 事件委托
- 操作DOM常用API詳解
- 重排和重繪
- 運行機制與V8
- 瀏覽器的線程和進程
- Vue.js
- Vue.js知識點總結
- Vue-Router知識點總結
- 父子組件之間通信的十種方式
- 優化首屏加載
- 關于Vuex
- 前端路由原理及實現
- 在Vue.js編寫更好的v-for循環的6種技巧
- 12個Vue.js開發技巧和竅門
- 網絡協議
- HTTP緩存機制
- UDP協議
- TCP協議
- HTTPS協議
- HTTPS的背景知識、協議的需求、設計的難點
- HTTPS與HTTP的區別
- 框架與架構
- MVC、MVP、MVVM
- Gulp與Webpack的區別
- Angular React 和 Vue的比較
- 虛擬DOM和實際的DOM有何不同?
- 架構問題
- 工程化
- npm link命令
- npm scripts 使用指南
- 前端工程簡史
- 常見的構建工具及其對比
- Webpack基本配置與概念
- 設計模式
- 工廠設計模式
- 單例設計模式
- 適配器模式
- 裝飾器模式