<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>

          Vue 3.0高頻出現(xiàn)的幾道面試題

          共 2467字,需瀏覽 5分鐘

           ·

          2021-03-18 17:35

          (給前端大學加星標,提升前端技能.

          作者:大唐榮華

          blog.csdn.net/weixin_40599109/article/details/110938941



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

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

          vue2在初始化的時候,對data中的每個屬性使用definepropery調(diào)用getter和setter使之變?yōu)轫憫綄ο?。如果屬性值為對象,還會遞歸調(diào)用defineproperty使之變?yōu)轫憫綄ο蟆?/p>

          vue3使用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é)點內(nèi)容

          Fragments, 模板里面不用創(chuàng)建唯一根節(jié)點,可以直接放同級標簽和文本內(nèi)容

          靜態(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ù)據(jù)來源不清晰;

          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é)點內(nèi)容;

          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ù)是否是對象。不是對象則直接返回這個參數(shù),不做響應式處理。創(chuàng)建攔截器handerler,設(shè)置get/set/deleteproperty。

          get

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

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

          set

          設(shè)置的新值和老值不相等時,更新為新值,并觸發(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()。

          點贊和在看就是最大的支持??

          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  一级A片调教打屁股 | 99热6在线观看 | 西西人体444WWW无码男男 | 9999热这里只有精品 | 日本熟妇一区二区三区 |