<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          5道Vue3.0 高頻面試題解析

          共 2828字,需瀏覽 6分鐘

           ·

          2021-07-27 12:05

          點擊上方 程序員成長指北,關注公眾號

          回復1,加入高級Node交流群

          1. Vue 3.0 性能提升主要是通過哪幾方面體現(xiàn)的?

          1.響應式系統(tǒng)提升

          vue2在初始化的時候,對data中的每個屬性使用definepropery調用getter和setter使之變?yōu)轫憫綄ο蟆H绻麑傩灾禐閷ο螅€會遞歸調用defineproperty使之變?yōu)轫憫綄ο蟆ue3使用proxy對象重寫響應式。proxy的性能本來比defineproperty好,proxy可以攔截屬性的訪問、賦值、刪除等操作,不需要初始化的時候遍歷所有屬性,另外有多層屬性嵌套的話,只有訪問某個屬性的時候,才會遞歸處理下一級的屬性。

          優(yōu)勢:

          • 可以監(jiān)聽動態(tài)新增的屬性;
          • 可以監(jiān)聽刪除的屬性 ;
          • 可以監(jiān)聽數(shù)組的索引和 length 屬性;

          2. 編譯優(yōu)化

          優(yōu)化編譯和重寫虛擬dom,讓首次渲染和更新dom性能有更大的提升 vue2 通過標記靜態(tài)根節(jié)點,優(yōu)化 diff 算法 vue3 標記和提升所有靜態(tài)根節(jié)點,diff 的時候只比較動態(tài)節(jié)點內容Fragments, 模板里面不用創(chuàng)建唯一根節(jié)點,可以直接放同級標簽和文本內容

          靜態(tài)提升

          patch flag, 跳過靜態(tài)節(jié)點,直接對比動態(tài)節(jié)點,緩存事件處理函數(shù)

          3. 源碼體積的優(yōu)化

          vue3移除了一些不常用的api,例如:inline-template、filter等 使用tree-shaking

          2. Composition Api 與 Vue 2.x使用的Options Api 有什么區(qū)別?

          Options Api

          包含一個描述組件選項(data、methods、props等)的對象 options;API開發(fā)復雜組件,同一個功能邏輯的代碼被拆分到不同選項 ;使用mixin重用公用代碼,也有問題:命名沖突,數(shù)據來源不清晰;

          composition Api

          vue3 新增的一組 api,它是基于函數(shù)的 api,可以更靈活的組織組件的邏輯。解決options api在大型項目中,options api不好拆分和重用的問題。

          3. Proxy 相對于 Object.defineProperty

          有哪些優(yōu)點?proxy的性能本來比defineproperty好,proxy可以攔截屬性的訪問、賦值、刪除等操作,不需要初始化的時候遍歷所有屬性,另外有多層屬性嵌套的話,只有訪問某個屬性的時候,才會遞歸處理下一級的屬性。

          • 可以* 監(jiān)聽數(shù)組變化
          • 可以劫持整個對象
          • 操作時不是對原對象操作,是 new Proxy 返回的一個新對象
          • 可以劫持的操作有 13 種

          4. Vue 3.0 在編譯方面有哪些優(yōu)化?

          vue.js 3.x中標記和提升所有的靜態(tài)節(jié)點,diff的時候只需要對比動態(tài)節(jié)點內容;

          Fragments(升級vetur插件):

          template中不需要唯一根節(jié)點,可以直接放文本或者同級標簽靜態(tài)提升(hoistStatic),當使用 hoistStatic 時,所有靜態(tài)的節(jié)點都被提升到 render 方法之外.只會在應用啟動的時候被創(chuàng)建一次,之后使用只需要應用提取的靜態(tài)節(jié)點,隨著每次的渲染被不停的復用。patch flag, 在動態(tài)標簽末尾加上相應的標記,只能帶 patchFlag 的節(jié)點才被認為是動態(tài)的元素,會被追蹤屬性的修改,能快速的找到動態(tài)節(jié)點,而不用逐個逐層遍歷,提高了虛擬dom diff的性能。緩存事件處理函數(shù)cacheHandler,避免每次觸發(fā)都要重新生成全新的function去更新之前的函數(shù) tree shaking 通過搖樹優(yōu)化核心庫體積,減少不必要的代碼量

          5.  Vue.js 3.0 響應式系統(tǒng)的實現(xiàn)原理?

          1. reactive

          設置對象為響應式對象。接收一個參數(shù),判斷這參數(shù)是否是對象。不是對象則直接返回這個參數(shù),不做響應式處理。創(chuàng)建攔截器handerler,設置get/set/deleteproperty。

          get

          • 收集依賴(track);
          • 如果當前 key 的值是對象,則為當前 key 的對
          • 象創(chuàng)建攔截器 handler, 設置 get/set/deleteProperty;

          如果當前的 key 的值不是對象,則返回當前 key 的值。

          set

          設置的新值和老值不相等時,更新為新值,并觸發(fā)更新(trigger)。deleteProperty 當前對象有這個 key 的時候,刪除這個 key 并觸發(fā)更新(trigger)。

          2. effect

          接收一個函數(shù)作為參數(shù)。作用是:訪問響應式對象屬性時去收集依賴

          3. track

          接收兩個參數(shù):target 和 key

          -如果沒有 activeEffect,則說明沒有創(chuàng)建 effect 依賴-如果有 activeEffect,則去判斷 WeakMap 集合中是否有 target 屬性-WeakMap 集合中沒有 target 屬性,則 set(target, (depsMap = new Map()))-WeakMap 集合中有 target 屬性,則判斷 target 屬性的 map 值的 depsMap 中是否有 key 屬性-depsMap 中沒有 key 屬性,則 set(key, (dep = new Set())) -depsMap 中有 key 屬性,則添加這個 activeEffect

          4.trigger

          判斷 WeakMap 中是否有 target 屬性,WeakMap 中有 target 屬性,則判斷 target 屬性的 map 值中是否有 key 屬性,有的話循環(huán)觸發(fā)收集的 effect()。

          作者:大唐榮華 ,來源:blog.csdn.net/weixin_40599109/article/details/110938941

          如果覺得這篇文章還不錯
          點擊下面卡片關注我
          來個【分享、點贊、在看】三連支持一下吧

             “分享、點贊在看” 支持一波 

          瀏覽 66
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91人妻无码成人精品一区二区三区 | 91亚洲影院 | 99re在线观看视频 | 最新在线看黄 | 国产精品久久久久久无码红治院 |