譯者:楊小福
鏈接: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開發依然是一件有趣和充滿挑戰的事。在此對參與本次調查統計的所以工程師們表示感謝,同時也希望本次的調查結果對整個社區有所價值。
完整的統計數據將會在幾天后發布到這個博客上。