nw.js作者Roger:找到正确方向比怎么做更重要

2018 年 12 月 4 日 InfoQ
作者 | 徐川

2009 年,Node.js 横空出世,JavaScript 终于突破了浏览器,可以在不同的平台上处理各种各样的任务,但当时,人们还只是拿它作为 Web 服务器或者前端开发工具来使用。到了 2011 年,有个人突发奇想,既然 Node 可以运行在不同的桌面上,为什么不拿它来开发桌面应用呢?于是,node-webkit(后改为 nw.js)诞生了。到今天,用 JS 开发桌面应用已经是从创业公司到巨头的共同选择。

这个人就是 Roger,今天,我想和你聊聊他的故事。

1 从中科大到英特尔

Roger 原名王文睿,老家在辽宁大连,1996 年进入中科大后一直读到博士毕业。在上课和研究期间,他第一次接触了 Linux,第一时间就产生了浓厚的兴趣。最开始,他只是在学校 BBS 的 Linux 版面上活跃,在上面交流和回答其他人的问题。和其他热衷 Linux 的同学熟悉以后,他开始组织线下的活动,包括一些现场的讲座和交流,以及 LUD(Linux User Diner) 聚会。当时学校向他们提供了定期场地,后来,在 2003 年他和其他小伙伴们注册成为了学校正式的社团,这就是中科大 LUG(Linux User Group)的由来。

2005 年,Roger 博士毕业,进入了英特尔,并且一待就超过了十年。

很多人可能以为英特尔就是个做芯片的公司,但实际上,英特尔的软件和服务部门有几千名员工,加上其他部门从事软件开发工作的人员,规模和一个大型的软件公司相当。所以在内部可以为工程师提供各种领域的工作机会。

在英特尔,Roger 待过不少的项目组,从开发虚拟化和应用移植的方案,之后在开发者工具产品部门和开源技术中心任职,参与 Java XML 性能库、MeeGo 和 Tizen 操作系统等多个系统和软件开发项目。

Roger 很喜欢英特尔的工程师文化的工作氛围,英特尔会不断追求前沿的技术以保证自己业界领导者的地位,因此员工都有机会学习和参与到业界最新技术当中。

(业余时间里,Roger 除了研究业界技术动态以外,还喜欢美剧、游戏和足球等活动。最近喜欢研究厨艺,他说,做菜和喜欢的编程有很多相似之处。)

现在,Roger 的工作很大一部分与开源相关,他每天仍然会写代码,也一直在维护知名开源项目 nw.js。他认为如果乐于不断学习新知识,并且乐于以更聪明的方式工作,编程会是一项非常理想的工作。

2 NW 缘起:MeeGo 和 Tizen 的 Web Runtime

MeeGo 和 Tizen 是基于 Linux 的移动操作系统,它们是英特尔、诺基亚和三星带头发起,曾试图作为 Android 和 iOS 的挑战者,类似的操作系统还有 Mozilla 发起的 Firefox OS。它们的特点是基于 html5 等 web 技术编写应用,鼓励跨平台的开发生态环境。

但是,这些尝试都失败了,Web 技术编写移动应用在当时还不成熟,功能和性能都有所欠缺,移动设备和网络的性能低下,也无法给 Web 应用提供良好的体验。

从 2009 年开始,Roger 所在的团队当时的工作是给这些移动操作系统开发 Web Runtime,即让这些 Web 应用跑起来的核心引擎。其中一项主要的任务就是拓展它的本地 API,比如操作本地文件、使用 GPS 传感器等,以实现和原生应用同样的功能。

对于如何实现这个功能,项目里的同事有不同的想法。Roger 在会议上和同事讨论时,他起初是想利用 Mozilla 的 js-ctypes 这样的项目,可以让 JavaScript 方便的调用任意 C 语言的代码。不过这个想法并没有被采纳。

后来英特尔开源部门开展了创新计划活动,工程师可以花 10% 的时间投入在自己的项目上,Roger 又想起了这个想法。那时候 Roger 正好了解到 node.js 这个项目,感觉用它来扩展本地的 API 是最好的选择——它拥有足够的能力,而且 JavaScript 开发者很熟悉 Node.js 的 API,它正好也处于起步阶段(当时的 Node.js 平台上有大概 4000 多个软件包),很受欢迎。Roger 想到了将两个项目集成在一起,这样 web 开发者就可以在 web 页面中直接调用 Node.js 平台的众多库。

说干就干,Roger 很快开始了编写代码,第一个实现的版本是基于 webkit 和 Node.js,命名为 node-webkit,经过了公司内部的开源流程后于 2011 年底在 GitHub 上 发布,并在 Node.js 社区的邮件列表里 宣布。由于它实现了一种新的编程方式,并且开发者不需要学习新知识就可以直接开始使用,在社区里得到了很好的反响。

公司的其他部门也对这个项目产生了兴趣,甚至有些人开始用它开发产品,后来公司也表示了进一步的支持,同意他用 50% 的时间来开发这个项目,过了一段时间以后又同意他招收一个实习生来一起工作,他在项目的邮件列表里发布了职位,不久后他收到了赵成的简历。

赵成以前曾经把 gtk 库的一些功能包装给 Node.js 使用,毫无疑问这是一个能力很强的小伙子,Roger 很快接纳了他,两人一起对 NW 做了改进,后来赵成成为当年的英特尔最佳年度实习生之一。

赵成本有机会留下来,但他最终还是选择离开,在 2012 年 12 月,他给 GitHub 做外包开发,尝试将 Atom 从嵌入式 Chromium 框架和原生 JavaScript 迁移到 NW 上来,由于项目的特殊性,移植困难重重,并导致最终诞生了 Atom Shell 项目(即后来的 Electron),这是和 NW 类似,同样用 Web 技术开发跨平台桌面应用的工具。

随着 NW 和 Electron 的推动,使用 Web 技术开发桌面应用的技术终于彻底流行开来。

3 NW 的现在

NW 上一次最重要的改进是在 2016 年发布的 0.13 版本,它的内部进行了一次重构。经过这个版本以后,NW 的软件质量有了不少提高,并且也能按时跟随 Chromium 发布新版本。对于这类项目来说,升级 Chromium 代码非常重要,因为 NW 发布的软件代码中,99% 都来自 Chromium 项目。每次 Chromium 升级都会修正大量错误,包括几十个安全补丁,同时提供最新的 Web 标准、新功能、新硬件支持和性能改进。这次重构也是以后很多的工作的基础。

NW 的大部分代码来自于 Chromium 和 Node.js 两个项目,Roger 和其他贡献者编写的那部分采用了 MIT 授权,加上 Chromium 和 Node.js 项目的开源授权,所以任何人在这些授权下都可以将这个项目商业化。对商业化的友好,导致后来出现了一些下游的商业化项目,例如 tint,以及集成和重新发布了 NW 的其他开发工具,例如 Construct2。

现在,NW 能够定期跟随 Chromium 和 Node.js 发布最新的版本,软件质量也有了不少提高。使用 NW 开发的软件也越来越多,典型的有微信小程序开发者工具。

NW 创立了使用 Web 技术开发本地应用的一种新模式,应用程序使用 Web 技术开发,容易开发出漂亮的用户界面,并借助 Node.js 平台的强大功能;同时对想开发本地应用的公司来说也比较容易找到开发者;已有的网站代码也易于复用。未来希望借这个项目推广这种开发模式,让越来越多的应用使用这种技术开发。或许它会成为 Java runtime 或者 .NET runtime 这样应用广泛的技术。

但同时 Roger 也认为,NW 这类技术仍然有很长的路要走:首先是性能需要进一步优化,如果能占用更少的内存、对用户输入响应更快的话,体验会更接近原生应用;另外 Web 平台的快速演进和稳定性对应用开发者也是一大挑战:目前,依赖 Web 运行时的应用需要不断维护以应对浏览器升级,例如 Chrome 66 版本中 autoplay 策略的变更就使很多网站不能正常工作,直到 Chrome 71 中才采纳开发者的意见实行了一个折衷方案。

Roger 乐于看到 Electron 的发展,他希望 Electron 能够和 NW 一起,推动这个领域不断的扩大和发展。对应用开发者来说,同时有两个选择,并且它们之间相互促进发展是比较理想的情况。

经历了 MeeGo 和 Tizen 的失败,以及 NW 的成功,让 Roger 认识到:知道什么是正确的事,比知道如何高效的做某件事重要的多。它会让你少走许多弯路,效果远高于延长工作时间和提高工作效率。雷军有句名言也表达了类似的意思,只要不走到只知道空谈的另一个极端,找方向值得你花更多的时间。技术人在选择技术和规划职业道路时也同样适用,希望 Roger 的经历和他的感悟能给读者一些参考。


在移动端研发领域 Native 研发效率低体验好,Hybrid 研发效率高体验差,美团支付基于容器增强在界面体验的实践,让美团钱包达到接近 Native 体验,同时兼备 Hybrid 的研发效率,其中包括白屏问题的解决,SPA 使用 Native 导航,离线化等。具体技术措施可以来 ArchSummit 现场听分享。会议报名最后 3 天,感兴趣联系票务灰灰 17326843116

阅读原文,了解更多干货详情!

登录查看更多
0

相关内容

Node.js 是一个在浏览器外部创建互联网应用程序的框架,它基于 Google 开发的 V8 JavaScript 引擎,轻量,高效,事件驱动,非阻塞I/O,特别适合运行于跨分布式设备的实时数据处理程序。
专知会员服务
145+阅读 · 2020年6月15日
斯坦福2020硬课《分布式算法与优化》
专知会员服务
118+阅读 · 2020年5月6日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
【新书】Python中的经典计算机科学问题,224页PDF
专知会员服务
52+阅读 · 2019年12月31日
推荐系统BAT面试题:说说协同过滤的原理
七月在线实验室
50+阅读 · 2019年1月30日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
活动报名| 出海产品从 0 到 1 该怎么做?
职人社
9+阅读 · 2018年10月25日
在 Google 工作六年半后,我还是选择离职了
开源中国
4+阅读 · 2018年10月21日
怎样才能找到一份AI领域的好工作?
算法与数学之美
4+阅读 · 2018年6月28日
如何从零到一地开始机器学习 ?(附思维导图)
THU数据派
6+阅读 · 2018年4月17日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
AI都干过什么让人细思极恐的事?
全球创新论坛
4+阅读 · 2017年9月15日
最大熵原理(一)
深度学习探索
12+阅读 · 2017年8月3日
Arxiv
8+阅读 · 2019年5月20日
Hardness-Aware Deep Metric Learning
Arxiv
6+阅读 · 2019年3月13日
Adversarial Metric Attack for Person Re-identification
CoCoNet: A Collaborative Convolutional Network
Arxiv
6+阅读 · 2019年1月28日
Arxiv
4+阅读 · 2018年3月22日
Arxiv
7+阅读 · 2018年1月24日
Arxiv
11+阅读 · 2018年1月15日
VIP会员
相关资讯
推荐系统BAT面试题:说说协同过滤的原理
七月在线实验室
50+阅读 · 2019年1月30日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
活动报名| 出海产品从 0 到 1 该怎么做?
职人社
9+阅读 · 2018年10月25日
在 Google 工作六年半后,我还是选择离职了
开源中国
4+阅读 · 2018年10月21日
怎样才能找到一份AI领域的好工作?
算法与数学之美
4+阅读 · 2018年6月28日
如何从零到一地开始机器学习 ?(附思维导图)
THU数据派
6+阅读 · 2018年4月17日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
AI都干过什么让人细思极恐的事?
全球创新论坛
4+阅读 · 2017年9月15日
最大熵原理(一)
深度学习探索
12+阅读 · 2017年8月3日
相关论文
Arxiv
8+阅读 · 2019年5月20日
Hardness-Aware Deep Metric Learning
Arxiv
6+阅读 · 2019年3月13日
Adversarial Metric Attack for Person Re-identification
CoCoNet: A Collaborative Convolutional Network
Arxiv
6+阅读 · 2019年1月28日
Arxiv
4+阅读 · 2018年3月22日
Arxiv
7+阅读 · 2018年1月24日
Arxiv
11+阅读 · 2018年1月15日
Top
微信扫码咨询专知VIP会员