写点什么

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

2018 年 12 月 04 日

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:001865
用户头像

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

关注

评论 2 条评论

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

MySQL-技术专题-LEFT JOIN避坑指南

李浩宇/Alex

「干货总结」程序员必知必会的十大排序算法

bigsai

排序 排序算法 快速排序

大厂经验:一套Web自动曝光埋点技术方案

阿亮

埋点 曝光埋点 点击埋点 自动化埋点

距离 2020 年结束不到2个月,字节跳动员工却在闲鱼卖内推名额登上热搜!

Java架构师迁哥

五年时间完成业务数字化转型,华为如今做得怎么样了?

华为云开发者社区

效率 提升 数字化

推荐几款MySQL相关工具

Simon

MySQL 工具 percona server

区块链医疗、电子票据应用落地开发解决方案

t13823115967

电子票据 区块链医疗

26张图带你彻底搞懂volatile关键字的底层实现

autoencoder

volatile 后端 多线程 并发 Java 分布式

京东智能客服品牌焕新:“言犀”亮相2020京东JDD大会

京东科技开发者

大数据 AI 知识图谱

最详尽最通俗易懂的c/c++堆栈机制解读

北游学Java

堆栈 C/C++ 堆栈溢出

关于 AWS Lambda 中的冷启动,你想了解的信息都在这!

donghui

Serverless Faas 函数计算

京东千亿订单背后的纵深安全防御体系

京东科技开发者

安全 网络 云服务 云安全

Mybatis日志功能是如何设计的?

Java架构师迁哥

2020年10月北京BGP机房网络质量评测:流水的其他,铁打的世纪互联?

博睿数据

机房 评测

.net5发布,.NET会就此“支棱起来”吗?

Philips

.net 敏捷开发 .net core

物化视图如何快速完成数据聚合操作?

VoltDB

数据库 数据分析 sql

数字化时代App们将何去何从?

fino星君

阿里内部11月最新出台Spring Cloud架构设计+程序开发+运维部署

Java架构追梦

Java 阿里巴巴 架构 微服务 SpringCloud

重点人员管控系统开发方案,智慧警务平台搭建

WX13823153201

SpringBoot-技术专题-如何提高吞吐量

李浩宇/Alex

uml图中各种线的关系

feiyun123

极客大学架构师训练营 UML

前端高效开发必备的 js 库梳理

徐小夕

Java GitHub 前端 js

跨语言跨平台聚合OpenAPI文档从来没有这么简单过

Trust Me

OpenAPI Knife4j Knife4jAggregation 微服务聚合OpenAPI

京东集团技术委员会主席周伯文:推进产业数智化发展需要技术和生态两把“桨”

京东科技开发者

区块链 大数据 AI 物联网,

区块链技术应用开发、区块链版权应用搭建解决方案

t13823115967

区块链技术应用开发 区块链版权搭建解决方案

从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计

华为云开发者社区

数据库 数据仓库 数据

以 Kubernetes 为代表的容器技术,已成为云计算的新界面

阿里巴巴云原生

云计算 Kubernetes 容器 云原生

中小型企业创业的福音

anyRTC开发者

创业 音视频 WebRTC RTC

2020年9月北京BGP机房网络质量评测:天地祥云木樨园力压群芳终进前三

博睿数据

机房 评测

成德眉资现代农业园区大联动促发展,“1链3e”引领四市农业产业数字化建设

CNG农业公链

MyBatis-技术专题-拦截器原理探究

李浩宇/Alex

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

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