Vue 原始碼流程講解

2022-09-09 10:54:12 字數 1839 閱讀 4965

模組分析vue原始碼,原始碼版本2.6.9

場景1:初始化vue例項,渲染到頁面,點選handlechangeweight方法

},watch:

},computed:

},methods:

}}

1, data初始化,weight設定為響應式時,有乙個dep儲存依賴,在其他變數獲取當前weigth時,收集其他變數的watcher

// 每乙個變數都會執行definereactive

// 一下**位置src\core\observer\index.js

// **有刪減

function definereactive(obj,key,val)

return value

},set: function reactivesetter (newval)

})}

2,computed初始化,建立watcher,watcher的lazy是true在最後再執行

var watchers = vm._computedwatchers = object.create(null);

watchers['type'] = new watcher(

vm,getter || noop,

noop,

computedwatcheroptions:

)object.defineproperty(vm, 'type',

if (dep.target)

return watcher.value}}

}})

3,初始化watch

watcher = new wacther(vm,'weight',watch:})

lazy:false 執行geter,獲取weight的數值,get方法,收集weight->watcher

watcher = === weight->watcher,

expression:'weight',

get:_=> 處理深度監聽'例如panda.name',觸發weight的get,返回weight的value,

user:true,

value:120

}

4, 在解析完html,轉vnode時,呼叫computed:type的getter方法,呼叫weight的get方法,收集依賴

_s(type)
5,把computed:type的watcher新增為_update(_render)的依賴

6, 點選change

觸發weight的setter,觸發依賴watcher.update,

watchers開啟乙個佇列,儲存非lazy的watcher,並promise.resolve().then(flushcallbacks)

函式處理完成

7,呼叫微服務

呼叫微任務,flushcallbacks

排序watchers,依次呼叫watcher.run

watch,update(render),addcomputed to update(render)的依賴中

備用小知識

watcher.prototype.get = function get ()  catch (e)  else 

} finally

poptarget(); // pop

this.cleanupdeps(); // 清空

}return value

};

MapReduce流程講解以及原始碼分析

對於使用者來說只需要書寫map操作和reduce操作 mapreduce計算資料的時間較長 整個過程分為map和reduce,map負責處理原始資料,reduce負責處理map資料 1.map過程 block 塊 物理上的概念,預設是128m split 切片 本次map任務要處理的資料的大小 預設...

Vue原始碼分析(流程分析)

使用步驟 1.編寫 頁面 模板 1.直接在html標籤中寫 2.使用template 3.使用單檔案 2.建立vue例項 1.在vue 的建構函式中 data,methods,computer,watcher,props,3.將vue掛載到頁面中 mount 資料驅動模型 vue執行流程 1.獲得模...

Spring原始碼講解

spring註解方式的refresh中beanfactory.preinstantiatesingletons 過程 spring如果解決迴圈依賴問題,如何使用 快取。beanfactory.preinstantiatesingletons 初始化和例項化操作 迴圈beandefinitionnam...