開發者是如何使用 Node.js —— 調查結果
開發者如何使用 Node.js——調查結果
為了解開發者如何使用 Node.js 以及偏愛的相關技術,2016年夏季, 下一代 Node.js 調試、性能監測解決方案——Trace 的提供者、Node 基金會的銀級會員——RisingStack 進行了一項調查。本文對調查結果進行了總結。
結果表明,MongoDB、RabbitMQ、AWS、Jenkins、Docker 以及 Amazon Container Services 是開發、集成、裝載 Node.js 應用的首選。
此項調查也讓我們了解開發 Node.js 的方方面面以及異步控制流、調試、持續集成或尋找包的選擇方案。結果顯示,Node 開發者的主要痛點是調試。
這項調查從 2016 年 7 月 11 日至 8 月 15 日,共開放了 35 天。在此期間,1126 位 Node.js 開發者共同完成了這項調查。其中 55% 開發者擁有兩年以上的 Node.js 經驗,26% 使用 Node 一至兩年。20% 在上市公司工作,7% 在《財富》500 強。
Node.js 相關技術
MongoDB 成為數據庫首選
根據結果,MongoDB 顯然是 Node.js 開發者的首選數據庫。大約 2/3 的參與者表示他們在自己的 Node.js 應用中使用 MongoDB。值得注意的是,在閱歷豐富的 Node 工程師當中,Redis 的人氣劇增,PostgreSQL 和 ElasticSearch 也是如此。
“Redis 和 PostgreSQL 在富有經驗的開發者中人氣劇增”——@RisingStack #nodejs #survey
Redis 在緩存解決方案上領先,但是許多開發者還沒有做這方面的處理。
一半參與者表示在用 Redis 進行緩存,但難以置信的是,有 45% 根本沒有緩存方案。相互比對經驗豐富的程序員的答案,我們可以發現,相比于 Node.js 經驗少于 1 年的工程師,Redis 在 Node 長期使用者中的人氣相當高。
消息系統的流行度仍舊較低
根據調查,58% 的 Node.js 開發者沒有使用任何的消息系統。這意味著開發者在自己的微服務系統中很少使用消息,而用了 REST API,或者他們的系統不夠復雜。
使用消息系統的開發者表示他們大多用 RabbitMQ(24% 的調查對象)。如果我們只研究使用消息系統的開發者的答案,那么 RabbitMQ 遠勝于其它已有的解決方案。
Node.js 應用大多在 AWS 上運行
根據調查,43% 的 Node.js 開發者用 AWS 來運行應用,但是自己運行數據中心也很普遍(34%),尤其是在企業間(幾乎 50% 有自己的數據中心)。這也并不奇怪。
“43% 的 Node.js 開發者用 AWS 運行應用”——@RisingStack #nodejs #survey @awscloud
但有意思的是,Heroku 和 DigitalOcean 并駕齊驅成為 Node.js 第二大云平臺。根據數據,DigitalOcean 在小公司(少于 50 人)間更流行,而 Heroku 作為企業解決方案也很強。
Docker 在 Node 社區中獨領風騷
目前,Docker container 是多數 Node.js 開發者的首選解決方案(47% 的調查對象表示在用——而 container 技術用戶中則高達 73%)。Docker 似乎在所有規模的公司間都很流行,但資深程序員使用得更多(一年以上開發經驗的)。
“Docker container 是多數 Node.js 開發者的首選方案。”——@RisingStack #nodejs #survey @docker
64% 的調查對象表示使用 container 技術——意味著 container 的流行度從 2016 年 1 月 Node.js 調查 的 45% 顯著提升了 20%。
Amazon Container Service 是運行 container 的首選
雖然 Amazon Container Service 是運行 Node.js container 的首選,但值得注意的是,根據我們的調查,Kubernetes 也占比 25%,并且似乎在企業 Node.js 開發者中尤其受歡迎。
Node.js 開發
配置文件比環境變量更加常用。
與證書相比,多數 Node 開發者(59% vs. 38%)更喜歡配置文件。只有 29 位調查對象(3%)表示兩個都用。
只用配置文件有潛在的安全問題,因為這表明證書存放在倉庫中。如果你在 GitHub 的生產系統中有證書,那么很快就會有無賴程序員來找麻煩。
為了安全性,建議使用環境變量,但是總的來說仍然可以用配置文件。
Promise 主導異步控制流
在 Node.js中,大部分核心庫都涉及回調。結果表明 Node.js 用戶目前都傾向使用 promise。
大概半年前, Node.js 核心倉庫的一條 pull-request 要求異步函數返回原生 Promise。對此的回答是:“Promise API 目前對核心功能來說沒有意義,因為基于 V8 的 promise 以及和其它 ES* 特性的關系還在發展初期。短期內 TC 內部在核心中探索 promise 的興趣不大”。
也許是時候重新審視這個問題了,因為出現了需求。
開發者依賴于 console.log 調試
Console.log 比其它像是 Node Inspector、Built-in debugger 和 debug module 等調試方案更勝一籌。大概 1/4 的 Node 開發者在應用中使用 console.log 定位 error,即使也有更加精細的解決辦法。
“大概 1/4 的 Node 開發者在應用中使用 console.log 定位 error。”——@RisingStack #nodejs #survey
進一步觀察數據可以發現更有經驗的開發者也傾向于 Node Inspector 和 Debug Module。
APM 在 Node.js 社區中仍舊低迷
根據調查顯示,只有 1/4 Node.js 開發者使用 APM——應用性能監測工具——來識別應用問題。但是,數據集的趨勢表明 APM 使用率會隨著公司規模和開發者經驗而上升。
SaaS CI 在 Node.js 社區的市場占有率依然較低
根據調查對象的答案,使用 shell 腳本是將代碼推到測試或生產環境最普遍的方式。但是 Jenkins 目前在持續交付和集成平臺方面明顯勝出,并且隨著公司規模的擴大而更受歡迎。
Node.js 開發者極少更新依賴
Node.js 應用強烈推薦經常更新依賴,因為 根據一項最近的調查 ,約 15% 的 npm 包帶有已知的漏洞,76% 的 Node 商店利用漏洞依賴。
每周至少要更新一次依賴,否則應用就會時刻暴露在嚴重的攻擊下。根據調查,45% Node.js 開發者一個月以上更新一次依賴,27% 每月更新一次,只有 28% 回答至少每周更新一次依賴。
這些數字與公司規模和程序員經驗都沒有關系。
Node.js 開發者用 Google 找包
根據調查,大多數開發者用 Google 找包,并 決定應該使用哪一個。雖然在調查對象中, npmjs.org/npms.io 搜索平臺的流行度達到了 56%,但是數據顯示在經驗豐富(四年以上的 Node 開發)的程序員中流行度幾乎高達 70%!此情況下偏好會隨經驗增加。
剛接觸 Node.js 的開發者不知道什么是語義版本管理
雖然 71% 的調查對象在發布/使用模塊時會用到語義版本管理,但是在我們看來,這個數字應該更高。每個人都應該使用語義版本控制,因為 npm 就用到了 semver。不用語義版本管理更新包很容易破壞 Node.js 應用。
深挖數據集,我們可以發現大約有一半經驗少于一年的 Node 開發者不知道 semver 是什么或者沒有使用 semver,而資深開發者們 semver 的接受度更高。
Node.js 團隊快速引進新技術、工具
據調查,35% Node 開發者能夠幾天內就為公司引進新的技術/工具/產品,29% 需要幾周的時間。
“35% Node 開發者能夠幾天內為公司引進新的技術/工具”——@RisingStack #nodejs #survey
深入研究數據,可以發現一種合理的模式——引進新技術/工具所需的時間會隨著公司規模遞增。
調試是開發 Node.js 的最大痛點
我們也詢問了 Node 開發者,什么是他們開發的最大痛點。答案排名如下:
- 調試/性能分析/性能監測
- 回調和回調地獄
- 理解異步編程
- 依賴管理
- 缺少統一規定/最佳實踐
- 結構化
- 糟糕的文檔
- 尋找合適的包
“開發 Node.js 最大的痛點是調試。”——@RisingStack #nodejs #survey
總結
開發 Node.js 仍是一項有意思、不斷變化的體驗。在此感謝抽時間回答問題的工程師們,希望本文的信息對整個 Node 社區是有價值的。
來自:http://blog.jobbole.com/108878/