译者:杨小福
链接:http://www.zcfy.cc/article/1304
原文:https://blog.risingstack.com/node-js-developer-survey-results-2016/
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来为他们的微服务提供消息服务,要么是他们还没有复杂到需要使用消息系统的服务。
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%)。
亚马逊容器服务成为运行容器的第一选择
虽然亚马逊容器占据着主导的地位,但我们也不能忽视Kubernetes也有着25%的占有量,同时从我们的数据来看,kubernetes更受到企业开发者的欢迎。
Node.js 开发
开发者更喜欢配置文件而不是环境变量
大部分的node.js开发者更喜欢配置文件而不是环境变量(59% VS 38%),只有29(3%)两者都在使用。
使用配置文件存在一定的安全隐患,因为你的认证数据就存储在代码仓库中。如果你的包含认证数据的代码托管在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的方式来发现程序中的错误即使在面对非常复杂的程序。
从数据中我们也可以看到富有经验的开发者们逐渐的使用Node Inspector 和 Debug Module 来调试程序。
APM(性能坚持工具) 在 Node.js 社区的使用率依然很低
从调查的反馈来看,只有约四分之一的开发者使用了APM工具来发现应用中的问题。从使用率来看可以发现随着公司规模的扩大和开发者经验的增长,APM的使用率会变得越高。
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开发中最令人诟病的问题
我们同样也问了开发者他们觉得开发中最头疼的问题是什么,下面是我们得到的结果:
- 调试、分析、性能监控
- 回调地狱
- 理解异步程序
- 依赖管理
- 缺乏实践
- 架构
- 不健全的文档
- 寻找合适的npm包
总结
Node.js开发依然是一件有趣和充满挑战的事。在此对参与本次调查统计的所以工程师们表示感谢,同时也希望本次的调查结果对整个社区有所价值。
完整的统计数据将会在几天后发布到这个博客上。