当我刚来Facebook
的React
团队工作时,我不确定接下来的工作会怎么样。表面看,React
核心团队似乎很大!但事实证明,像Eli White和Sebastian McKenzie这样的人都在React Native团队。考虑加上那些维护开源库的维护者,比如Chakra UI
、Framer Motion
,React
核心团队人数似乎能填满整个体育场!但事实恰恰相反。React
核心团队很小:
塞巴斯蒂安·马克巴奇(Sebastian Markbage)
卢娜·阮(Luna Ruan)
丹·阿布拉莫夫(Dan Abramov)
安德鲁·克拉克(Andrew Clark)
布莱恩·沃恩(Brian Vaughn)
里克·汉隆(Rick Hanlon)
塞思·韦伯斯特(Seth Webster)
克里斯汀·阿伯纳西(Christine Abernathy)和我自己。
虽然Dan是大多数人想到React
时会想到的人,但Sebastian其实是仅存的“创始”团队成员之一。尽管Sebastian并未发明React
,但他仍然是团队的“指南针” —— 他负责考虑每个新功能如何更好的融入。Dan和Andrew共同建立了Redux
。Brian建立了React DevTools
。里克(Rick)是一位高数的布道者。Luna负责Relay
,并且是团队中唯一主修计算机科学的人!克里斯汀(Christine)与大学合作,立足React Native
的教育工作。塞思是我们的团队经理。我负责文档和教材的工作。如果你深入了解这个团队,你会很惊讶的发现:Andrew是麦霸,Seth曾是个音乐人,Brian也在录歌(加分项:他的猫是非官方吉祥物。)
Rick热衷于参加社会活动,Dan会跳夜店style的舞。Christine看过漫威的每部电影,Luna和我都喜欢普洱茶。Sebastian则花了很多时间学习木工!在Facebook
内部,React
是庞大软件生态的一部分。这些项目不断相互影响,有开源也有闭源的。Facebook
的工程文化就像解决方案的反应堆。React
本身是内部的几个UI
库之一,但他很快脱颖而出并开源。现在,尽管React
启发了公司的其他UI
框架,库和解决方案,但React
核心团队的运作就像一个独立的精密实验室。尽管与标准机构的工作并不完全相同,但是在React
团队的经历会让我想起W3C
的情况。它几乎就像一个致力于使开发人员更轻松地编写一致、可响应、可重用UI
的工作组。
当考虑将新的规范引入浏览器时,规范作者在完成API
前需要很谨慎。每个API
都是多个浏览器开发人员的承诺 —— 并且很可能是一个永久承诺。React
团队会影响他们的工作,因此我们也需要很谨慎。一项功能的开发从深入的讨论和和谐的辩论开始。一旦功能完善,就会出现在Fackbook
的“living lab”中进行测试。每个纳入RFC
的特性都在经过社区测试前在内部经过测试,这能排除很多坏主意。尽管新的规范可能“破坏互联网惯例”(参考命途多舛的XHTML2),是否升级新版React
完全处于开发者自愿,重点是易于迁移以及与现有库的兼容性。尽管有些特性可能难产,但长远看,仍可能取得成果。在15年,团队尝试使用worker
提升性能。
结果并不理想 —— 数据传输的开销超出了预期。尽管实验失败,但他带来来很多启发 —— 如果可以将组件划分为在主线程上执行的组件和在工作线程上执行的组件,为什么它们不能在服务器和浏览器之间拆分执行?
五年后,这个想法构成了React
团队几天前宣布的Server Components
提议的基础。同样,在2018年,React
团队与Prepack
团队合作 —— 希望对组件进行编译时性能优化。这次合作耗时数月!最后,权衡利弊下,实验“失败了”。
但是,从那次实验中学到的东西为那一年晚些时候的Hooks
设计提供了思路,它还显示仅靠编译时不足以优化性能。很多需要优化的代码都属于编译器可能不知道的动态条件。但是服务器可以!这也是两年后出现Server Components
的另一种解读。当人们看到Dan上台演讲,或阅读Luna关于新JSX转换的release
说明时,不会意识到:对于像Hooks
这样的每一个完善的功能,能够成为release
,在其背后还有许许多多特性甚至没到达RFC
阶段。所有特性都必须等到完全准备就绪为止。
在此之前,只能给其他特性让路。在一个如此重视交付,并且交付的速度越来越快的行业,当你的承诺无法兑现时,这让人非常沮丧。但是这并不意味着没有进步:你有时间思考与计划,有时间实验与学习。即使暂时失败了,也会为成功的特性带来启发。即使你还没完成年初的预期工作,也要相信挫折和颠覆是常态,而不是例外,无论好坏,即使在React
上也是如此。
React
团队非常重视以正确的方式做正确的事。有时,这意味着无论是情感上还是技术上,都需要付出许多耐心。这也意味着向别人寻求帮助与建议,而不是试图独自做所有事情。这意味着要有信念,不能因为你没有新的特性产出,就意味着你没有提供价值。