写点什么

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

  • 2018-12-04
  • 本文字数:3107 字

    阅读完需:约 10 分钟

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

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


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

从中科大到英特尔

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。他认为如果乐于不断学习新知识,并且乐于以更聪明的方式工作,编程会是一项非常理想的工作。

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 技术开发桌面应用的技术终于彻底流行开来。


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 的经历和他的感悟能给读者一些参考。


2018-12-04 10:002944
用户头像

发布了 164 篇内容, 共 116.5 次阅读, 收获喜欢 392 次。

关注

评论 2 条评论

发布
用户头像
然而,贫穷限制了我的想象力。。。
2018-12-13 18:40
回复
没有更多了
发现更多内容

从商业增长到自然增长,OPPO广告联盟为开发者开辟增长新路径

极客天地

平凯星辰 TiDB 获评 “2023 中国金融科技守正创新扬帆计划” 十佳优秀实践奖

编程猫

精彩回顾|从架构到实践,AntDB融合型数据库揭秘

亚信AntDB数据库

数据库 AntDB AntDB数据库

体验函数计算 FC 3.0,写测评赢取索尼头戴式耳机

Serverless Devs

云计算 Serverless AIGC

任福继院士:基于交叉学科的研究将成主流,算力平台和计算人才是自主创新关键

极客天地

更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!

极客天地

Gitlab配置mirrorRepository 镜像仓库

javaNice

Java gitlab

StoneDB顺利通过中科院软件所 2023 开源之夏 结项审核

StoneDB

MySQL 数据库 HTAP StoneDB

外包的鄙视链,背后原因是什么

老张

外包 竞争力 核心竞争力

万界星空科技云MES管理系统和ERP的对接

万界星空科技

数字化转型 mes 云mes 万界星空科技 万界星空科技mes

来文心中国行厦门站,感受大模型落地生花的进展!

飞桨PaddlePaddle

文心一言 文心中国行

微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题

JackJiang

网络编程 即时通讯 IM

华秋这场技术研讨邀请了哪些重磅嘉宾?

华秋电子

赛车竞速游戏:art of rally拉力赛车 for Mac 1.5.0中文版

繁星

赛车竞速游戏 Art of Rally

助力开发者健康长效增长 OPPO 开启应用和服务生态新篇章

极客天地

CodeWhisperer--手把手教你使用一个十分强大的工具

亚马逊云科技 (Amazon Web Services)

Python 人工智能 云上探索实验室 Amazon CodeWhisperer Amazon Cloud9

KiCon Asia 2023完美落幕,助力Kicad生态繁荣,华秋在行动

华秋电子

kicad

华为云GaussDB助力工商银行、华夏银行斩获“十佳卓越实践奖”

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

苹果Mac动态壁纸:Dynamic Wallpaper 16.7中文版

繁星

动态壁纸 Dynamic Wallpaper

巴适得板!这次我们和四川一起加“数”前行!

天翼云开发者社区

云计算 大数据

一张图厘清各大操作系统的发展脉络

小巫debug日记

欢迎提报 | 2023年龙蜥社区优秀贡献者评选正式启动

OpenAnolis小助手

开源 操作系统 龙蜥社区 最佳案例 突出贡献

LED显示屏防护等级知识讲解

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家 等级

更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!

天翼云开发者社区

云计算 云原生

如何搞砸一场面试?

王磊

Java 面试

为何选择独立服务器?稳定、高效、安全等优势一览

一只扑棱蛾子

独立服务器

nw.js作者Roger:找到正确方向比怎么做更重要_大前端_徐川_InfoQ精选文章