Node 之父重構的 Deno 正式發佈了,它會取代 Node 嗎?

clipboard.png

技術編輯:徐九丨發自 侏羅紀公園
SegmentFault 思否報道丨公衆號:SegmentFault前端


近日,Deno 1.0 正式發佈了。這是 Node 之父 Ryan Dahl 繼 Node 以後的又一大做。git

Deno 是一個通用的 JavaScript / TypeScript 編程環境。它聚集了許多最佳的開源技術,並在一個小的可執行文件中提供了全面的解決方案。github

Deno 和 Node 做爲「同父異母」的親兄弟,不只名字很像,就連要解決的問題也很像。那麼 Ryan 推出 Deno 的目的什麼?它們之間又有哪些異同?npm

既生 Node,何生 Deno?

clipboard.png

Dahl 曾經在 JS Conf Berlin 上作了一個題爲《10 THINGS I REGRET ABOUT NODE.JS》的演講,在這個演講中他總結了本身當初在 Node 設計中的失誤。編程

其中的遺憾之一是沒有使用 JavaScript Promises,這些東西在 2009 年被添加到 Node 中,但在 2010 年被移除。這致使的結果是不少 Node 的 Async API "老化嚴重"。後端

另外一個失誤是安全性和缺少 Node 沙盒。Dahl 表示使用 GYP(Generate Your Projects)的構建系統對用戶來講是"可怕的體驗"。安全

與早期關注均衡 I/O 的狀況相反,模塊系統本質上是過後考慮的。若是考慮到這一點,那麼在早期階段就能夠作的更好。網絡

這也是 Dahl 爲何要搞 Deno 的緣由,但 Deno 並不定位爲 Node 的替代品,從總體功能來看,Deno 有更大的野心。據業內人士分析討論,推測是想要取代如今陳舊的先後端開發模式,讓 Deno 一統先後端開發全流程。異步

Deno 和 Node 的區別

clipboard.png

它創建在V8(Chromium和Node.js所使用的JavaScript引擎)上,但與Node不一樣的是,它利用了V8沙盒的安全優點。除非明確啓用,不然沒有文件、網絡或環境訪問權限。工具

clipboard.png

與用 C++編寫的 Node.js 不一樣,Deno 用 Rust 編寫。

Deno_core 是一個 Rust 包,任何人均可以用它將 JavaScript 運行時嵌入到 Rust 中,而 Deno 就是創建在 deno_core 之上。

另外一個包 Rusty_v8,提供了 Rust 與 V8 C++ API 的綁定;它 "試圖成爲一個安全的接口",但還不是百分之百的安全。"可以以安全的方式與 V8 這樣複雜的虛擬機進行交互是至關驚人的,這讓咱們發現了 Deno 自己的許多困難的 bug,"Dahl 發佈的帖子解釋道。

Deno 的調度是由 Tokio 處理的,它是 Rust 的異步運行時。另外一個關鍵組件是 TypeScript,它是 Deno 中的主要語言。你能夠直接運行 TypeScript 文件,不須要將其編譯成 JavaScript。

Deno自己就是一個完整的生態系統,具備運行時和其本身的模塊/軟件包管理系統。這爲內置全部工具提供了更大的空間,而且成功地消除了 JavaScript 開發中的許多缺點。好比:

  • 經過使用 Web 標準,Deno 能夠對其 API 進行過期的驗證;
  • 除 JavaScript 以外還擁有 TypeScript,消除了編譯負擔並容許更緊密的集成;
  • 內置工具意味着無需浪費時間尋找開箱即用的產品;
  • 分散式軟件包管理使用戶從 npm 中解放出來,與使用遞減的 CommonJS 相比,ECMAScript 模塊帶來了新鮮的空氣;

Deno 會取代 Node 麼?

clipboard.png

不管如何,由 Dahl 大神光環加持,再加上「面向將來」的設計,Deno 確定會成爲一個熱議的話題。

不過雖然此次 Deno 的版本號標爲了 1.0,但也仍處於很是早期的階段,Deno API 的某些部分還不穩定,根據文檔所說,Deno 的標準模塊也還不太穩定。該團隊還表示內部使用的 TypeScript 編譯器速度很是慢。

他們的意圖是將 TypeScript 編譯器移植到 Rust 上,儘管這是一個大項目。若是完成的話,對全部的 TypeScript 開發者都會有幫助,因此 Deno 團隊也在呼籲你們爲他們提供幫助。

因此,對於 Deno 是否會取代 Node 這件事,如今討論還爲時尚早。但多一個輪子多一條路,Deno 的出現,對於前端這個領域來講,必定是一個好事情。

相關資料:

官方文檔:https://deno.land/
GitHub 地址:https://github.com/denoland/deno

clipboard.png

相關文章
相關標籤/搜索