如何閱讀框架源代碼
如何閱讀框架源代碼
2017-07-07 10:01:51 來(lái)源:51CTO
搶沙發(fā)
2017-07-07 10:01:51 來(lái)源:51CTO
摘要:不管對(duì)于那個(gè)段位的 Developer 來(lái)說(shuō),讀源碼都是一件好處頗多的事情,特別于初學(xué)者而言,這能迅速的吸納優(yōu)秀框架精華代碼營(yíng)養(yǎng),迅速成長(zhǎng)。
關(guān)鍵詞:
框架源代碼
不管對(duì)于那個(gè)段位的 Developer 來(lái)說(shuō),讀源碼都是一件好處頗多的事情,特別于初學(xué)者而言,這能迅速的吸納優(yōu)秀框架精華代碼營(yíng)養(yǎng),迅速成長(zhǎng)。不巧的是,晦澀難懂的源碼,很容易讓人心生怯意。今天分享就來(lái)談一談讀源碼的方法,希望能幫到一些有心讀源碼的朋友。
一、了解框架解決了什么問(wèn)題
這不光對(duì)讀源碼有幫助,對(duì)整個(gè)學(xué)習(xí)都很有幫助。思考一個(gè)問(wèn)題:你學(xué)習(xí) Vue\React 的原因,除了它們?nèi)缛罩刑?,再不學(xué)習(xí)都不好意思找工作了,還摻雜了一些它們的某些優(yōu)秀特性能給我?guī)?lái)某某好處的思考么?
新潮的框架,開(kāi)發(fā)者需要而且也應(yīng)該去了解,用人單位需要當(dāng)然是本能的驅(qū)動(dòng)力,什么火學(xué)什么也無(wú)可厚非,但是在悶聲學(xué)習(xí)之前,需要加上一層思考,相比之前的技術(shù)體系,這個(gè)框架到底解決了什么問(wèn)題,優(yōu)勢(shì)在哪,懷著目的去學(xué)習(xí)才不至于迷茫,例如 Vue\React 最大的優(yōu)點(diǎn)是什么呢?組件化吧,帶著框架是如何解決這個(gè)問(wèn)題的疑問(wèn)去學(xué)習(xí),定能事半功倍
對(duì)于讀源碼來(lái)說(shuō),這一步就更關(guān)鍵了,如果都不了解代碼是要干什么的,怎么會(huì)清楚它為什么這么寫(xiě)呢?再細(xì)分一下,在仔細(xì)閱讀某個(gè)模塊的文件的時(shí)候,也應(yīng)當(dāng)對(duì)模塊的功能有個(gè)整體的把握
二、了解框架的設(shè)計(jì)思想
這一步尤為關(guān)鍵,我們看不懂源碼(或者看起來(lái)舉步維艱),并不是因?yàn)椴欢骋痪湔Z(yǔ)法,而是不明白作者的思路。舉一個(gè)簡(jiǎn)單的例子:
getAngle方法接收三個(gè)坐標(biāo)參數(shù),可以計(jì)算出 point2 頂角的弧度值,如果不告訴你這使用了運(yùn)用三角形的余弦定理,恐怕你看半天也看不出來(lái)這是怎么算出來(lái)的
那么我們可以通過(guò)什么渠道去了解框架的設(shè)計(jì)思想:
到框架的官網(wǎng)看文檔,開(kāi)源的框架,甭管詳不詳細(xì),這肯定是第一手權(quán)威資料
到網(wǎng)上搜別人的分析總結(jié)(源碼分析也不會(huì)少),大多數(shù)情況下,都會(huì)有大神已經(jīng)研究過(guò)了,站在巨人的肩膀上,能省不少事
另外,設(shè)計(jì)思想是整個(gè)框架層面的,對(duì)于每一個(gè)實(shí)現(xiàn)細(xì)節(jié),又會(huì)使用不少設(shè)計(jì)模式,例如函數(shù)式編程(Js 中最為常用)、單例模式、代理模式、工廠(chǎng)模式等等,這就需要平時(shí)的積累了。有一定代碼量的積累之后,建議閱讀一些設(shè)計(jì)模式類(lèi)的書(shū)籍,對(duì)自己的代碼設(shè)計(jì),以及閱讀別人的源碼,都很有益處。
三、搭建調(diào)試環(huán)境,摸清執(zhí)行主脈絡(luò)
第一節(jié)我們提到,細(xì)分到每個(gè)模塊,要對(duì)模塊功能有個(gè)整體的把握,如何去做到這個(gè)“把握”?除了官方文檔和網(wǎng)上查閱的資料,最好的辦法就是寫(xiě)一個(gè)簡(jiǎn)單的 Demo,搭建好測(cè)試環(huán)境,增加一些調(diào)試信息,自然能理清除框架的生命周期中,每一步需要調(diào)用那個(gè)模塊(對(duì)于目錄結(jié)構(gòu)很清晰的優(yōu)秀框架,有時(shí)候也可以憑直覺(jué)猜測(cè),打印日志確認(rèn))
四、分清主次
框架源碼就是一顆枝繁葉茂的參天大樹(shù),而你要做的事情是從根部網(wǎng)上爬。樹(shù)要這么多分支,時(shí)間又是這么昂貴,閱讀的策略很重要。我們的閱讀路徑,要以主要流程為主(也就是樹(shù)的主驅(qū)趕,這樣才能盡可能快的到達(dá)頂點(diǎn)),對(duì)于一些細(xì)枝末節(jié),再這之后再來(lái)慢慢啃(或者有必要的時(shí)候)
例如,要去閱讀 Vue 的源碼,有個(gè)目錄是解析模板,生成語(yǔ)法樹(shù) AST 從而最終生成 Render Function 的, 其實(shí)這一步最關(guān)鍵的是這個(gè) Render Function 的生成結(jié)果,對(duì)于如何去解析模板、生成語(yǔ)法樹(shù),可以先放一放,回頭需要的時(shí)候再回頭看。否則你很容易卡死在某個(gè)點(diǎn)上出不來(lái),從而產(chǎn)生放棄的念頭
五、堅(jiān)持不放棄
技術(shù)策略得當(dāng),遇到棘手過(guò)不去的問(wèn)題也很正常,這個(gè)時(shí)候考驗(yàn)的就是毅力了,繼續(xù)調(diào)試、搜索資料、或者找個(gè)大神來(lái)問(wèn)一問(wèn)都行,只要不放棄就好~~
第三十四屆CIO班招生
北達(dá)軟EXIN網(wǎng)絡(luò)空間與IT安全基礎(chǔ)認(rèn)證培訓(xùn)
北達(dá)軟EXIN DevOps Professional認(rèn)證培訓(xùn)
責(zé)編:zhangxue
免責(zé)聲明:本網(wǎng)站(http://www.www.gypb.net/)內(nèi)容主要來(lái)自原創(chuàng)、合作媒體供稿和第三方投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
本網(wǎng)站刊載的所有內(nèi)容(包括但不僅限文字、圖片、LOGO、音頻、視頻、軟件、程序等)版權(quán)歸原作者所有。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),請(qǐng)及時(shí)通知本站,予以刪除。