红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2018-12-04 10:002552
用户头像

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

关注

评论 2 条评论

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

21《重学JAVA》-- 集合 (三)

杨鹏Geek

Java25周年 28天写作 12月日更

浅谈protobuf

lecury

协议 服务器端开发 protobuf

比较PostgreSQL与MySQL两大开源关系数据库管理系统

Ethereal

MySQL 数据库 postgresql

模块七作业:王者荣耀商城异地多活架构设计

dean

架构实战营

架构实战营-模块七作业

随风King

「架构实战营」

混沌工程之 ChaoBlade 的实现原理

zuozewei

混沌工程 ChaosBlade 12月日更

百度智能云以知识智能化驱动产业智能化升级

百度大脑

Flink 实践教程-进阶(4):TOP-N

腾讯云大数据

flink 流计算 Oceanus

阿里云(腾讯云)服务器使用宝塔,搭建Python环境,运行 django 程序

梦想橡皮擦

12月日更

用户日活月活怎么统计 - Redis HyperLogLog 详解

程序员历小冰

redis 28天写作 近似算法 12月日更 HyperLogLog

[Pulsar] TopicPolicy的同步过程

Zike Yang

Apache Pulsar 12月日更

DDD领域驱动设计实战(一)-领域模型、子域、核心域、通用域和支撑域等基本概念

JavaEdge

12月日更

【大咖直播】Elastic 企业搜索实战工作坊(第二期)

腾讯云大数据

Elastic Search

Flink 实践教程-进阶(3):窗口操作

腾讯云大数据

flink 流计算 Oceanus

实用机器学习笔记二十一:集成学习之Bagging

打工人!

人工智能 机器学习 学习笔记 集成学习 12月日更

架构实战营

ren

妙解RIP协议和OSPF协议的优缺点,建议收藏!

Ethereal

网络协议 OSPF 网络技术 网络技术联盟站 rip

语音输入还是打字输入

将军-技术演讲力教练

百度搜索中台海量数据管理的云原生和智能化实践

lecury

云原生 数据架构 架构演进 技术创新 百度搜索

一年一度绩效考核

搬砖的周狮傅

绩效管理

MySQL从入门到入魔(03)

海拥(haiyong.site)

MySQL 数据库 28天写作 12月日更

【CSS 学习总结】第一篇 - HTML 的语义化

Brave

CSS 12月日更

Dart 条件语句

坚果

flutter dart 28天写作 12月日更

感情是麻烦出来的(21/28)

赵新龙

28天写作

为Amazon DMS数据库迁移任务建立自动化监控机制

亚马逊云科技 (Amazon Web Services)

Data

基于SLA的测试

QualityFocus

云原生 测试 SLA

读《思辨与立场》-07-02指导原则

wood

28天写作 批判性思维 思辨与立场

Prometheus Exporter (三十三)BIND Exporter

耳东@Erdong

Prometheus 28天写作 bind exporter 12月日更

如何在Linux系统中安装Docker?

Ethereal

Docker

Vuepress 2.X + Element-Plus 的基本使用

AR7

typescript Vue3 vuepress Element Plus Vuepress2.X

基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统

腾讯云大数据

流计算 Oceanus Elastic Search

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