這次,面的是廣州品高,面試官問我的一道題,為什麼Vue會比Jquery更受開發者喜愛?煞筆如我,只回答了一些不痛不癢的答案。
先來看看我的答案:1.Vue支援資料繫結,而Jquery沒有。2.Vue有中文文件,所以vue比較受中文開發者喜愛(回了這個答案估計就涼了)。3.Vue支援元件化,也就是模組化,每個元件都可以單獨工作。
事後,當然是需要補救知識盲區啦。首先百度答案,基本所有的推薦文章都是互相抄襲,不夠具體,還好還是有可取之處的。這些文章基本都說原因是
1.jQuery是使用選擇器($)選取DOM物件,對其進行賦值、取值、事件繫結等操作,其實和原生的HTML的區別只在於可以更方便的選取和操作DOM物件,而資料和介面是在一起的。比如需要獲取label標籤的內容:$("lable").val();,它還是依賴DOM元素的值。
2.Vue則是通過Vue物件將資料和View完全分離開來了。對資料進行操作不再需要引用相應的DOM物件,可以說資料和View是分離的,他們通過Vue物件這個vm實現相互的繫結。這就是傳說中的MVVM。
我個人覺得這些答案都挺水的,所以我嘗試去回答。
Vue其實優點挺多的,我這裡就說我知道比較重要的幾點。
1.Vue比JQuery減少了 DOM 操作
在這裡我先提出一個問題,為什麼要較少DOM操作????
回答:當DOM操作影響到佈局的時候,瀏覽器的渲染引擎就要重新計算然後渲染,越多的DOM操作就會導致越多的計算,自然會影響頁面效能,所以DOM操作減少是最好的
那Vue又是怎麼樣減少DOM操作的呢?
Vue通過虛擬DOM技術減少DOM操作。什麼是虛擬DOM?使用js物件模擬DOM,在操作過程中不會直接操作DOM,等待虛擬DOM操作完成,僅僅比較開始和結束狀態虛擬DOM有哪些變換,最終根據結束狀態虛擬DOM去操作DOM。至於虛擬DOM怎麼比較則是採用diff演算法,具體演算法我也不會。不過diff演算法裡有一個很好的措施來減少DOM操作。
下列是diff的處理措施:
(引用於:https://blog.csdn.net/m6i37jk/article/details/78140159)
(一)、優先處理特殊場景
(1)、頭部的同型別節點、尾部的同型別節點
這類節點更新前後位置沒有發生變化,所以不用移動它們對應的DOM
(2)、頭尾/尾頭的同型別節點
這類節點位置很明確,不需要再花心思查詢,直接移動DOM就好
(二)、“原地複用”
“原地複用”是指Vue會盡可能複用DOM,儘可能不發生DOM的移動。Vue在判斷更新前後指標是否指向同一個節點,其實不要求它們真實引用同一個DOM節點,實際上它僅判斷指向的是否是同類節點,如果是同類節點,那麼Vue會直接複用DOM,例如通過對換文字內容的方式,這樣的好處是不需要移動DOM。
2.Vue支援雙向資料繫結
資料繫結有單向資料繫結和雙向資料繫結。
什麼是單向資料繫結?
單向資料繫結即一方面只受另一方面影響,卻無法影響另一方面。前端常說的單向資料繫結一般都指資料影響頁面,而頁面不影響資料。
什麼是雙向資料繫結?
雙向的意思即兩個方面相互影響,前端來說,即資料影響頁面,頁面同時影響資料。例如,在 MVVM 框架中,View(檢視) 和 Model(資料) 是不可以直接通訊的,在它們之間存在著 ViewModel 這個中間介充當著觀察者的角色。當使用者操作 View(檢視),ViewModel 感知到變化,然後通知 Model 發生相應改變;反之當 Model(資料) 發生改變,ViewModel 也能感知到變化,使 View 作出相應更新。
舉個栗子
以上程式碼將input的value和頁面顯示雙向繫結在一起。其實v-model只是語法糖,雙向繫結其實就等於單向繫結+UI時間監聽,只不過Vue將過程採用黑箱封裝起來了。
那雙向繫結有什麼好處?
好處就是方便,資料自動更新。而缺點就是無法得知是哪裡更改了資料。
3.Vue支援元件化
元件化的概念
Web 中的元件其實就是頁面組成的一部分,好比是電腦中的每一個元件(如硬碟、鍵盤、滑鼠),它是一個具有獨立的邏輯和功能或介面,同時又能根據規定的介面規則進行相互融合,變成一個完整的應用,頁面就是有一個個類似這樣的部分組成,比如導航、列表、彈窗、下拉選單等。頁面只不過是這些元件的容器,元件自由組合形成功能完善的介面,當不需要某個元件,或者想要替換某個元件時,可以隨時進行替換和刪除,而不影響整個應用的執行。
元件化的特性
高內聚性,組建功能必須是完整的,如我要實現下拉選單功能,那在下拉選單這個元件中,就把下拉選單所需要的所有功能全部實現。
低耦合度,通俗點說,程式碼獨立不會和專案中的其他程式碼發生衝突。在實際工程中,我們經常會涉及到團隊協作,傳統按照業務線去編寫程式碼的方式,就很容易相互衝突,所以運用元件化方式就可大大避免這種衝突的存在、
每一個元件都有子集清晰的職責,完整的功能,較低的耦合便於單元測試和重複利用。
元件化的優點
1.提高開發效率 2.方便重複使用 3.簡化除錯步驟 4.提升整個專案的可維護性 5.便於協同開發
結語
由於缺乏經驗,還是吃了不少虧,希望有大神願意指點一下。