1. 程式人生 > 實用技巧 >vue深入挖掘日記

vue深入挖掘日記

 q1:Vue 為什麼採用 Virtual DOM 機制?

虛擬節點對應的就是真實節點
建立真實節點使用document.createElement和document.createTextNode

可以建立一個真實的節點,然後列印試試
可知,如果資料每改變一次,都真實的進行整個dom樹的重繪和重排,那麼效能是很低的。
(如下圖)

因此,虛擬節點解決了這個問題。
——用一個簡單的物件去代替複雜的dom物件。

先判斷資料是否有改變,如果有改變則更新到真實的dom。

——同時,他可以減少瀏覽器的重繪和迴流
由於本質是一個js物件,具有跨平臺功能,

總結:事實上,有的時候手動優化節點反而比虛擬節點更快速便捷,尤其是在節點比較少的情況下;但是當頁面結構比較龐大複雜的時候,虛擬節點更便捷,以及可維護性更高。

因此,相對來說,虛擬節點在效能和可維護性方面達到了平衡,更具有應用性。

q2:關於vue的diff演算法瞭解多少?

瞭解diff演算法,需要知道vue的虛擬節點和真實節點的區別在哪。

結合上一個問題可以知道,虛擬節點就是資料改變時,會生成一個新的vnode,與舊的oldnode比較,發現有不一樣的就直接修改真實的dom

diff的過程就是呼叫名為patch的函式,比較新舊節點,一邊比較一邊給真實的DOM打補丁。

virtual dom和真實節點的區別,就是將真實的節點關係用物件關係模擬出來。

1<div>
    <span>test</span>
</div>
2
var dom1 = { tags: 'div', children: [{ tags: 'span', value: 'test' }] }

當資料發生改變時,set方法會讓呼叫Dep.notify通知所有訂閱者Watcher,訂閱者就會呼叫patch給真實的DOM打補丁,更新相應的檢視。

借鑑部落格:https://www.cnblogs.com/wind-lanyan/p/9061684.html

q3:Virtual DOM 中的列表渲染為什麼要用 key?

為了能更高效的更新virtual dom

q4:vue中資料響應原理

——變化偵測

如何偵測一個物件的變化,有兩種方法

1、使用object.defineProperty

2、使用es6的proxy

關於收集依賴詳細解析看這裡:https://blog.csdn.net/riona_cheng/article/details/102882160

q5:使用Vue 這類框架開發的 SPA 為什麼會出現頁面白屏的問題,又該如何解決

npm run build打包頁面空白,有可能是config檔案配置路徑出錯

assetsPublicPath: '/'改為assetsPublicPath: './'

在遊覽器中 / 代表域名的根目錄,./代表當前路徑

更多:https://www.cnblogs.com/love314159/articles/9355785.html


q6:如何讓基於Vue.js 的應用支援 SEO 優化?

Vue SPA單頁面應用對SEO不友好;

1.SSR伺服器渲染;
2.靜態化;

更多解析詳見:https://www.jb51.net/article/164285.htm

q7:使用 Vue 這類框架實現一個無限滾動的長列表

常用分頁來解決資料量過多的問題,但是有時候不可以用分頁。

解決思路,1、下拉重新整理獲取新資料,但問題是隨著資料逐漸增多,頁面節點也越來越多,會變卡頓。

2、懶載入,只渲染頁面可視區域。

詳見:https://juejin.cn/post/6844904008658731022