Categories
程式開發

Deno將於5月13日發布1.0版本,Node.js會逐漸失寵嗎?


Deno 是 Node.js 之父 Ryan Dahl 在 2018 年 5 月發布的開源項目,其產生的背景在於 Ryan Dahl 認為當下的 Node.js 太難用了。一般人說出這種話可能會被 Diss 你行你上,但這對 Ryan 來說並不是什麼難題。雖然 Deno 1.0 的版本發布數次推遲,但 Ryan 近日表示經過詳細的討論後,確認了最終發布的日期:2020 年 5 月 13 日,這也將是 Deno 項目啟動的兩週年紀念日。

Deno 1.0,5 月 13 號見

2018 年 5 月,Node.js 之父 Ryan Dahl 發布了新的開源項目——Deno。從項目名就可以看出其與 Node.js 千絲萬縷的聯繫。

官方文檔介紹,Deno 是一個 JavaScript / TypeScript 運行時,具有安全的默認設置和良好的開發體驗,構建在 V8 引擎、Rust 語言和 Tokio 之上。 (最初的 Deno 版本是用 Go 語言寫就,但在第二版中移除了 Go 轉而用 Rust 語言替代,因為後者俱有更好的安全性。)

Deno 的目標是為現代程序員提供一個高效、安全的腳本環境。

在業界看來,Deno 目前的狀態更像是一個 Demo,而 Ryan 本人當時也表示“Deno 與 Node 最大的區別在於,Node 可以用於工作,而 Deno 還不行”。但對前端開發者來說,Deno 確是一個值得學習的新項目。

此前 Deno 項目中有關 1.0 版本的 issue 做了更新,Ryan 表示:

在努力做好(Deno)這件事和推出一款可用的產品之間很難取得平衡。因為還沒有在開發工具支持特性上取得實質進展,官方團隊再次推遲發布日期。官方團隊進行了詳細的討論,得出結論是 2 個月的時間足夠了。巧合的是,這是自 Deno 問世以來的兩週年紀念日。因此,我們將 2020 年 5 月 13 日定為 1.0 版本發布日期。我們鼓勵貢獻者在 4 月 20 日之前對 API 進行重大修改——在那之後,我們將對 API 進行完善和 bug 修復。當然,在 1.0 之後,API 將繼續發展和改進,但是我們將為一些接口提供顯式的穩定性保證。

Deno,這個 Node 之父的 Demo 項目,終於迎來了正式發版之日。

Node.js,並未失寵

Deno 發布之初,前端圈不少人分析其將是 Node.js 的替代品,將其稱為”下一代 Node“。

狼叔此前在應前端之巔約稿時有提到,Node.js 的意義具體而言有兩方面:

首先它打破了原有的前端邊界,之前應用開發只分前端和 API 開發。但通過引入 Node.js 做 BFF 這樣的 API proxy 中間層,使得 API 開發也成了前端的工作範圍,讓後端同學專注於開發 RPC 服務,很明顯這樣明確的分工是極好的。

其次,在前端開發過程中,有很多問題不依賴服務器端是做不到的,比如場景的性能優化,在使用React 後,導致bundle 過大,首屏渲染時間過長,而且存在SEO 問題,這時候使用Node.js 做SSR 就是非常好的。

以上可以看出,Node.js 在眼下的大前端佈局裡的重要性。

另一方面,Node.js 社區的生態和繁榮度發展仍舊十分迅速。此前InfoQ 翻譯的一篇Node.js 基金會的調查報告顯示,Node.js 的使用量仍然在快速增長,超過¾的參與者期望在來年擴展他們的使用場景,另外和前一年的報告相比,Node 的易學程度有了大幅提升。

而根據 ModuleCounts.com 的數據,Node 的包註冊中心 NPM 每天會增加 507 個包,相比後一名要多出 4 倍。 2018 年 Stack Overflow 調查也有類似的結果,JavaScript 是使用最廣泛的語言,Node.js 是使用最廣泛的框架。

更進一步,Serverless 技術的火爆也帶來了 Node.js 勢頭的水漲船高。主流Serverless 廠商紛紛把寶押在Node.js上,主要是看上了JavaScript 工具的豐富生態,再加上Node.js 的輕量化、容易分散與水平擴充、各種操作系統都容易運行的特性,將Node.js 作為無服務器服務優先支持的框架,這也讓Node.js 更適合用於超大規模部署的應用。

Ryan Dahl 最初並沒有意識到 Node.js 會產生如此大的影響,他將其歸功於社區的持續改善,從而獲得了越來越成熟的 Node.js 框架。這也從另一方面揭示了,對於一款成功的開源軟件 / 框架而言,技術上的實現只是其中一步,如何形成完整的生態、活躍的社區,才是其獲得長久發展的關鍵。

對於 Deno 而言,基本功能在 5 月 13 號以後應該就齊全了,但它要解決的問題還有很多。

這次,請別刷學不動了

我原本沒想發明 Node.js,而是想用 Haskell 語言完成我的項目,但是失敗了。我又不夠聰明,沒有能力改進 GHC(Haskell 語言的運行時),只好發明新的工具。

Ryan Dahl 在接受采訪時曾表示,自己造 Node 輪子的原因在於自己不夠聰明,沒有能力改進已有工具,所以只好發明新的工具。這不禁讓人回想起了他創立Deno 之前的一句抱怨——“(現在的)Node.js 太難用了”,由此看來,他可能是真的認為發明新輪子比改進舊輪子省事兒。

2018 年 5 月,Deno 上線 GitHub 之初,就有許多國內開發者在 issue 區灌水,“別更新了,學不動了”。前端之巔認為,這種“中國式”的程序員幽默,並不適宜於用在一個正式項目的issue 區,考慮到文化差異的問題,這種“幽默”不僅顯得更加不合時宜,而且會進一步造成對中國開發者的誤解。

對於絕大部分開源項目而言,issue 的首要目標是為項目維護者而不是項目使用者提供服務。 issue 的意義在於追踪 bug、新增 feature、推動項目進度等有助於項目發展的事件,而不是類似 BBS 的無聊灌水。

技術的更新換代是正常發展規律,“別更新了,學不動了”最終也會被“真香”所取代。對於新陳代謝尤為迅猛的前端領域而言,前端開發者們更應該保持對技術的熱愛,不要把自己局限在“切圖仔”的狹小天地裡。

最後送給大家三條建議:

  1. 不要糾結於開發工具——不管是庫、編程語言還是平台。盡可能使用原生的構件。不要歪曲技術,也不要歪曲了問題本身。為要解決的問題選擇合適的工具,否則你要為你所選擇的工具重新安排你的工作。
  2. 遠離“炒作驅動開發”,但你要去了解它們,做一些嘗試。
  3. 走出舒適區,每天都要學習。把學到的東西分享出來。如果你以大師自居,就不是在學習。接觸更多的編程語言、技術、文化,保持一顆好奇心。