如何阅读前端代码

read_code

踩过的坑

在之前的笔记《D3Charts-给legend实现动画分页效果》中,已经提过了自己了解项目时踩过的一些坑:

没理解数据结构

比如Group,之前都忽略了,直接导致方案设计有误,试图控制每一个LegendItem去实现动画。

没有理清楚类的继承关系和调用流程

在代码中绕来绕去,花了很久。最后自己画了一个关系图,瞬间就清晰了好多。

调试手段低效

一开始没有采用debugger,直接在代码里面埋点,效率太低了。

而且因为JS的弱类型语言特性,很多地方无法通过ctrl+鼠标点击,跟进代码内部,这又进一步增加了理解成本。

陷入代码细节

跟代码很容易陷入细节,而忽视全局的设计思路。

就比如动画,稍一思考,肯定能想到这是view层的,应该从view相关的代码中通过渲染、事件去找到实现原理。结果我调代码时将注意力都放在了代码细节上,被代码牵着走了。

另外,如果调试了一定时间(比如半小时或者1小时)仍然没有任何头绪,得赶紧停一下,要么问下其他同事,要么换个别的思路进行尝试。

一些套路

业务需求

(如果能找到人的话),先找之前的开发人员,详细给你讲一下业务需求以及他的程序设计思路。

这相当于路灯,如果没有这个路灯,你就很可能会瞎折腾,浪费时间。

数据、事件、视图、流程

前端四剑客,把项目中的这三块搞清楚,就能基本掌握项目原理了。

debugger

如果说上一步是对项目进行宏观上的了解,那么这一步就是微观了解了。

通过debugger走一遍,把上面的四剑客串起来,把每个部分是怎么关联起来的弄清楚。

代码调用栈可视化分析

已经有人写了,详见github

看了这个开源组件,才知道,原来babel居然可以借助AST在每个函数的逻辑前后植入自己的逻辑,这个很棒,可以通过这个功能,做很多有意思的事情,比如性能统计、调用栈分析等等。

关于Babel的原理和插件的编写,详见这个文章

关于AST,可以用这个工具辅助理解,另外这里还有个可视化的工具,使用svg写的,也可以玩一下。