Node.js 开发者们都在做什么?
RisingStack,Node 基金会成员, Trace (下一代 Node.js 调试和监控工具) 的作者在 2016 年夏天主导了一项关于 Node.js 的开发者们倾向于哪方面的技术的调查。本文即这次的调查统计结果。
调查结果显示 MongoDB, RabbitMQ, AWS, Jenkins, Docker 和亚马逊托管服务成为开发者们的首选。
本次的调查结果页让我们发现开发者们在异步流程控制、代码调试、持续集成和包的搜索方面的关注和选择。同时也告诉我们 Node.js 开发者面临着一大痛点:调试。
本次调查从七月 11 日到八月 15 日总共历时 35 天,总共有 1126 名 node.js 开发者参与了本次的调查。其中 55% 的开发者具有两年以上的 node.js 开发经验,26% 具有 1 到两年的经验。20% 为公开交易的公司工作,7% 在 500 强的公司工作。
基于 Node.js 的技术产品
MongoDB 成为首选的数据库
从上图我们可以看到,MongoDB 已经成为开发者首选的数据库。大约有三分之二的人向我们声称在他们的应用中使用了 MongoDB。同样值得关注的是 Redis 在有经验的 Node.js 开发者中的受欢迎程度在快速的增长,PostgreSQL/ElasticSearch 也有着同样的增长趋势。
Redis 是缓存的一种解决方案,但还是有许多开发者不是这样做的
有半数的开发者向我们反馈他们使用 Redis 来解决缓存的问题,但惊人的是依然有 45% 声称他们完全不用 Redis。从不同经验的开发者的统计数据中我们可以看到富有经验的开发者比不到一年的开发者们更喜欢使用 Redis。
消息系统的依然受到冷落
从我们的调查数据来看,有 58% 的 Node.js 开发者不使用任何的消息系统。这意味着要么是开发者们选择使用 REST API 来为他们的微服务提供消息服务,要么是他们还没有复杂到需要使用消息系统的服务。
systems are you using? RabbitMQ wins." />
24% 的开发者们在使用消息系统,并且他们大多选择了 RabbitMQ.RabbitMQ 的受欢迎程度远远的超过了其它的同类型产品。
Node.js 应用大多数托管在 AWS
有 43% 的开发者们将应用托管在 AWS 上,但他们中的 34% 都有自己的数据存储系统,这在企业应用中超过了 50%。(当然这并不令人惊讶)
有趣的是,Heroku 和 DigitalOcean 在你追我赶成为第二大托管平台的同时,DigitalOcean 更受小公司(50 人以下)的喜爱,而 Heroku 更受到大公司的欢迎。
Docker 在 Node 社区中占据主导地位
就目前来看,Docker 成为首选的容器解决方案,有 47% 的人声称他们在使用 Docker, 同时在使用容器解决方案的开发者中有 73% 的选择了 Docker.Docker 在不同规模的公司中都很受欢迎,同时更受到富有经验的开发者(一年以上的 Node 开发经验)的喜爱。
有 64% 的人告诉我们他们在逐渐的使用容器技术,这也意味着自从上一次 Node.js 统计以来,截止到 2016 年 8 月为止,容器技术的使用率已经提高了 20%(上一次统计结果为 45%)。
亚马逊容器服务成为运行容器的第一选择
Amazon Container Service wins." />
虽然亚马逊容器占据着主导的地位,但我们也不能忽视 Kubernetes 也有着 25% 的占有量,同时从我们的数据来看,kubernetes 更受到企业开发者的欢迎。
Node.js 开发
开发者更喜欢配置文件而不是环境变量
大部分的 node.js 开发者更喜欢配置文件而不是环境变量(59% VS 38%),只有 29(3%)两者都在使用。
files? Config files wins." />
使用配置文件存在一定的安全隐患,因为你的认证数据就存储在代码仓库中。如果你的包含认证数据的代码托管在 github,那么久有可能遭到不怀好意的开发者的麻烦。
从隐私的角度来说,更推荐使用环境变量来做验证,当然针对普通的情况依然可以使用配置文件。
Promises 成为异步流程控制的主要解决方案
在 Node.js 中,大多数的核心库都使用了许多的回调函数,而从本次的调查结果来看,开发者们现在更多的使用 Promise。
大概半年以前,有一个 Node.js 仓库的 Pull-request 要求所有异步函数返回一个原生的 Promise. 官方给出的回复如下: 'A Promises API doesn’t make sense for core right now because it's too early in the evolution of V8-based promises and their relationship to other ES* features. There is tiny interest within the TC in exploring this in the core in the short-term.'
也许我们该重新思考这个问题。
开发者们大多通过 console.log 来调试程序
Console.log 成为开发者们主要的调试手段,别 Node Inspector 还要多。大约有四分之三的开发者都通过 console.log 的方式来发现程序中的错误即使在面对非常复杂的程序。
debug your applications? Using the console.log" />
从数据中我们也可以看到富有经验的开发者们逐渐的使用 Node Inspector 和 Debug Module 来调试程序。
APM (性能坚持工具) 在 Node.js 社区的使用率依然很低
从调查的反馈来看,只有约四分之一的开发者使用了 APM 工具来发现应用中的问题。从使用率来看可以发现随着公司规模的扩大和开发者经验的增长,APM 的使用率会变得越高。
logs." />
SaaS CI’s 在 node.js 社区中依然保持着比较低的份额
从我们的调查数据来看,大多数的开发者通过使用 shell 脚本来推送或是部署代码。但 Jenkin 成为持续推送和集成里面最为受欢迎的平台。
Node.js 开发者很少更新依赖
使用 Node.js 的过程中是极力的推荐开发者频繁的更新代码依赖的。从最近的一份统计可以看出大约有 15% 的 npm 包是携带有安全漏铜的,而有着 76% 的应用在依赖这些 npm 包。
超过一周才更新一次依赖会使应用一直处于被攻击的状态。而从我们的统计结果来看,有 45% 的开发者超过一个月才更新一次,27% 的开发者会每个月更新一次,28% 的开发者会每周更新一次。
上面这些统计数据不受公司规模和开发者经验程度的影响。
很多开发者通过 google 来寻找他们需要的 npm 包
从统计结果来看,很大一部分的开发者通过 google 来寻找 npm 包并选择使用哪一个 npm 包。有 56% 的开发者们喜欢使用 npmjs.org/npms.io 来搜索 npm 包文件,这在开发经验大于 4 年的开发者中比例高达 70%.
初级的 Node.js 开发者并不知道语义化的版本号的含义
尽管有 71% 的开发者使用语义化的版本号来管理他们发布的 npm 包,但这个数字应该更高才对。每个开发者都应该使用语义化的版本号管理,npm 使用 semver。如果不使用的话在更新包文件的时候是很容易出错的。
如果我们仔细的分析调查的数据就会发现一年以内经验的 node.js 有一半不知道 semver 是什么而且也没使用过。而富有经验的开发者对此更熟悉也用得更多。
Node.js 团队所使用的工具和技术更新非常快
通过我们的调查数据发现,35% 的 node.js 开发们会在几天内就会引入新的工具,产品,有 29% 会在几周内引入。
如我我们仔细的分析调查的数据就会发现随着公司体积的增长,引入新工具及技术所需要的时间也会相应的增长。
调试是 Node.js 开发中最令人诟病的问题
我们同样也问了开发者他们觉得开发中最头疼的问题是什么,下面是我们得到的结果:
总结
Node.js 开发依然是一件有趣和充满挑战的事。在此对参与本次调查统计的所以工程师们表示感谢,同时也希望本次的调查结果对整个社区有所价值。
完整的统计数据将会在几天后发布到这个博客上。
版权声明
本译文仅用于学习、研究和交流目的,欢迎非商业转载。转载请注明出处、译者和众成翻译的完整链接。要获取包含以上信息的本文 Markdown 源文本,请点击这里。