Deno從2018年5月中放上Github網站開源至今年1月,已有超過80名開發者參與,經常貢獻程式碼 的核心開發者也有5名。

「天啊!Node現在好難用。」Node.js之父Ryan Dahl去年初要開發一款JavaScript互動式數值分析工具時,忍不住抱怨起自己十年前一手創造的技術。

Ryan Dahl想要設計出一款類似IPython的互動式資料科學分析命令列工具,但改用JavaScript語言,要讓JavaScript也可以像Python那樣,進行各式各樣的資料分析、統計計算以及資料視覺化呈現。一度離開Node.js開發社群的Rayn Dahl,再次拿起自己發明的Node.js來開發這個資料分析新工具,但越用越彆扭,他開始思考,有什麼方法可以改進Node.js。

Node.js是他在2009年11月8日時,在JavaScript社群歐洲JSConf大會上首度發布的專案,可以將瀏覽器端的JavaScript技術,帶入了伺服器端應用領域。臺灣JavaScript開發者年會總召也是艾客碼科技負責人戚務漢更直言,前端網頁工程師從來沒想過,自己也可以成為後端工程師,但Node.js讓前端技術走出了瀏覽器,前端工程師甚至可以成為全端工程師,Node.js改變了前端工程師的世界。

2009年,因為在瀏覽器端用Flickr上傳檔案進度時,難以得知檔案數的一個小需求,讓Ryan Dahl設計出這個伺服器端的JavaScript框架,至今已經發展到了第10版。而隨Node.js而生讓另一位開發者Isaac設計出JavaScript套件管理工具npm,更成了網頁開發者必懂得技術,在npm的儲存庫上,註冊了超過60萬個Node.js模組,更讓Node.js的應用遍及各類開發或程式需求。

JavaScript是最普及的語言,而Node.js是最受歡迎的框架

根據Stack OverFlow網站2018年的開發者大調查,這份來自全球超過10萬開發者作答的調查,JavaScript是開發者中最普及的技術,近7成開發者都會用,比HTML或CSS的普及率還要高,而最多人懂的開發框架排名中,第一名就是Node.js框架,將近5成開發者(49.6%)經常使用,比2017年還微幅上升了2個百分點,愛用者還持續增加,遠高於排名第二的Angular(36.9%),這正是因為Node.js是前端或後端工程師都能用的技術。

Node.js不只是當前的主流技術,也是下一代網頁應用架構Serverless(無伺服器)架構的關鍵技術。擔任Azure Functions專案經理的微軟資深首席軟體工程師Christopher Anderson就曾直言,主流無伺服器服務業者紛紛壓寶Node.js,因為看上了JavaScript工具的豐富生態系,再加上Node.js的輕量化、容易分散與水平擴充性、各種OS都容易執行的特性,將Node.js作為無伺服器服務優先支援的框架,這也讓Node.js更適合用於超大規模部署的應用。

Ryan Dahl自己坦言,從沒想到Node.js日後會帶來這麼大的影響。他也歸功於後來開發社群的持續改善,才讓它越來越成熟。統計到2018年8月,Node.js開發者已經超過2千人,十年來的更新發布次數超過500次,在GitHub上程式碼的下載次數更累計超過了10億次,就連大型科技公司如PayPal,或頂尖科技機構NASA都愛用。

但Ryan Dahl從2012年開始淡出Node.js社群,轉而進入Go、Rust語言社群,也重回他擅長的數學應用領域,2017年還申請了Google 大腦1年進駐計畫,加入Google大腦研究團隊一員,擔任深度學習工程師,投入圖像處理技術的研究。直到2018年6月初,就在Node.js準備邁入第10年之前,JSConf歐洲大會再次邀請Ryan Dahl來擔綱開場演講。

儘管大受歡迎,但Node.js仍有十大技術債

原本Ryan Dahl計畫在2018年這次JSConf演講中,分享自己這款JavaScript版的IPython互動式資料分析工具,沒想到一直開發到5月,這個工具都還不能用。本來要放棄這次演講的Ryan Dahl念頭一轉,乾脆把他重拾Node.js後發現的問題,拿出來分享,這就是去年引起全球開發社群熱烈討論的那場演講,題目是「我在Node.js最後悔的10件事」。Ryan Dahl在演講中坦言,Node.js有十大設計錯誤,甚至可說是他的10大悔恨(他刻意用Regret這個詞來形容)!

這些讓Ryan Dahl懊悔不已的錯誤,包括了沒採用JavaScript非同步處理的Promise物件、低估了安全性的重要、採用gyp來設計Build系統、沒有聽社群建議改提供FFI而繼續用gyp,另外,他也覺得Node.js過度依賴npm功能(內建到package.json支援是個錯誤)、太容易可用require("")來嵌入任意模組、package.json容易造成錯誤的模組觀念(讓開發者誤以為同一目錄下的檔案就是同一模組)、又肥又複雜的node_module設計以及開發社群抱怨已久的下載黑洞問題(下載npm得花上非常久的等待時間)、require("module")功能沒有強制要求註名.js附加檔名,以及無用的index.js設計。

2012年,Ryan Dahl離開了Node.js社群,他事後解釋,Node.js的發展已經步上正軌,也達到他最初的目標,因而決定離開,但在2018年這場演講中,他坦言,Node.js還有大把問題要修,所以,現在他回來了,要來償還當年的技術債,挽回Node.js的設計錯誤。

Ryan Dahl提出的答案是,要打造一個全新的伺服器端JavaScript runtime,也就是Deno專案。

讓Ryan Dahl懊悔不已的Node.js十大技術債

1. 沒用JavaScript非同步處理的Promise物件

2. 低估安全的重要

3. 採用gyp來設計Build系統

4. 沒有聽大家建議提供FFI而繼續用gyp

5. 過度依賴npm(內建package.json支援)

6. 太容易可require("任意模組")

7. package.json建立錯誤的模組概念(在同一目錄下的檔案就是同一模組)

8. 又肥又複雜的node_module設計和下載黑洞(往往下載npm得花上非常久的時間)

9. require("module")時沒有強制加上.js附加檔名

10. 無用的index.js設計。

 

關於Ryan Dahl

2009年11月8日,Node. j s之父RyanDahl在歐洲JSConf大會,首度發布了Node.js專案,一鳴驚人,將瀏覽器端的JavaScript技術,帶入了伺服器端應用領域。不過,他從2012年開始淡出Node.js社群,轉而進入Go、Rust語言社群,2017年加入Google大腦研究團隊一員,擔任深度學習工程師。現為自由開發者。

2018年6月初,Ryan Dahl於JSConf歐洲大會發表了Node.js十大悔恨,並推出了新的伺服器端JavaScript runtime專案Deno。2018年11月也首度來臺參加臺灣JSDC活動向臺灣開發者介紹Deno。

 
 


Advertisement

更多 iThome相關內容