自从React的内部实现改成Fiber以后,源码就变得至关晦涩,啃了一个月以后,稍微总结的了一点经验、阅读时的误区、以及为何不少次看不下的缘由,可是我相信,这些经验能够成为我未来阅读源码的过程当中最大的武器。我相信阅读源码并从中提炼知识是最好的学习方式。前端
这一点尤为是对React16而言,由于整个调用栈会很是的深,深到超过你的记忆和理解能力。你须要去先了解React16的设计,用法,而后利用函数名、文件名、模块划分,去理解当前这个函数属于整个流程的那个阶段。 就React而言,从初始话建立ReactElement、ReactRoot、FiberRoot、rootFiber这些过程,再到scheduler各类任务的过程、再到经过fiber进行的reconciler的过程,最后到commit,环环相扣,若是你一开始的阅读是从头看到尾,你可能会晕头转向、而后说这坑爹啊。 这些流程、设计理念每每在官方文档中会涉及、或者上网看一些大牛的文章,先了解整个模块划分、流程是很是有意义的,这个年代了,大把的知识分享没理由很差好利用对吧。webpack
咱们生产开发的版本和框架开发者的设计是不同的,咱们用的每每是打包以后的结果,不信你能够试试从React的master分支clone一个仓库下来看看。 contribution文档最大的做用是,框架开发者们告诉你怎么测试、调试、打包这个框架。他们会告诉怎么打包有sourceMap、怎么打包最快、测试哪一个功能能够用哪一个demo,这无疑会让我省下大量精力去熟悉项目配置、写demo测试等等。甚至会有阅读指导?git
这一点在webpack源码中就很是的明显了,webpack的plugin机制基于Tapable, 而Tapable整个模块都是基于事件的,若是你不了解Tapable,你只会发现webpack的源码在莫名其妙的跳转。 当你从React中找到独立的模块时,别想了,猛攻就是。github
有时候,咱们会在阅读的过程之中丢失阅读的意义,为了阅读而阅读,不只消磨耐心和斗志,也会让你毫无收获。 提问题有几种方式web
由于框架开发和应用层开发不同,这会让你遇到不少不熟悉的领域,须要你去另外研究,再回来一遍。 在React中看到的位运算、链表操做在前端常规开发中都比较少遇到,若是你发现了你是由于不熟悉某些知识而看不懂,那么恭喜你了,你发现本身的知识盲区了,赶忙去补一补。面试
我一贯喜欢研究提高开发效率的工具,webstorm的各类功能固然也用得溜,可是对于一个新项目,太过依赖全局搜索,每每会丢失对模块的认识,有时候手动找找文件,多看看目录名和文件名、熟悉一下函数位置,都能提升你对项目的熟悉度。api
若是让我总结,我会以为阅读源码就是一个猜想与验证的过程。 咱们能够从变量名、模块名中猜想这个模块/函数的功能。猜是很是重要的,带着咱们预测的思路去看代码,哪怕是错的思路,这也能够集中本身的注意力,而后在发现错误的时候更深入的理解。性能优化
这一点可能老生常谈了。但的确很是重要。 若是是一个比较小型的库,你大能够先写个demo,了解功能,而后开始阅读源码,顺便利用demo断点调试一下。可是对于稍大一点的库,我建议仍是先从api、设计理念、这个库想解决的问题这几点入手。并且要熟读官方文档。 固然,与其主动熟悉某个仓库,还不如直接从平时生产中经常使用的工具库中选一个来阅读,既能提升生产和debug的效率,又能提升知识的深度,何乐而不为。框架
当准备阅读源码就是一场持久战,在阅读的过程当中,可能会有大量重复或者不理解的地方,若是不理解大能够标记个TODO避免死磕细节。每次看懂的地方也须要注释,由于颇有可能看到后面忘了前面,注释不怕啰嗦,就怕不写。 个人建议是从框架github fork一份,注释也能够推送本身的fork仓库。 此外,当某个模块看完,或者看得累,建议及时输出一份流程图,既能够用于帮助理解,也能够用于未来复习。webstorm
这一点可能不止是在阅读源码中须要用到,在任何技术知识的学习,输出文章用因而最好的学习方法,当你试图讲清一个知识,你会发现本身对知识的漏洞,而且组织文章过程能够系统规划整理整个知识脉络。并且能够增强印象便于未来复习,看本身文章复习会比上网查一篇来回顾效率高得很是多。 不少知识是须要回顾复习的,你能够想一想你刚毕业的时候学的理论知识,如今还可否了然于胸?