模組分析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...