Deno 1.0 發布了。Deno 是作者Ryan Dahl 在 Node 之后的又一大作,它是一個新的運行時,用于在 Web 瀏覽器之外執行 JavaScript 和 TypeScript,其采用 Rust 編寫而成(最初用的是 Golang)。
Deno 試圖提供一個獨立的工具來快速編寫復雜功能的腳本,它將始終是單個可執行文件。就像 Web 瀏覽器一樣,它知道如何獲取外部代碼。在 Deno 中,單個文件可以定義任意復雜的行為,而無需任何其它工具。
Ryan Dahl 認為過去他在設計 Node 時犯了一些錯誤,包括安全性、構建系統、package.json、node_modules、index.js 等等,并表示Node 存在的種種不足導致有許多嚴重 bug 問題且不可回避,當前JavaScript 和周圍的軟件基礎架構已經發生了巨大的變化,值得進行簡化,于是他重新設計了 Deno 這門腳本語言。
Rust API
今天正式發布的 1.0 版本帶來了命令行界面 CLI 1.0。Deno 本身并不是一個單體的程序,而是設計為 Rust crate 的集合,以允許在不同的層進行集成。Deno 中的 Rustcrate deno_core 不依賴于 TypeScript 或 Tokio,它只是提供了操作和資源基礎架構。也就是說,它提供了一種將 Rust 特性綁定到 JavaScript promise 的有組織方式。CLI 則完全建立在 deno_core 之上。
rusty_v8crate 提供高質量的 V8 C++ API 的 Rust 綁定。該 API 嘗試盡可能與原始 C++ API 匹配,它是零成本的綁定,因為 Rust 中暴露的對象與在 C++ 中操作的對象完全相同。
HTTP 服務器性能
Deno 的 HTTP 服務器是采用 TypeScript 在原生 TCP socket 的頂層實現的,Node 的 HTTP 服務器使用 C 語言編寫,并作為對 JavaScript 的高級綁定暴露。一直以來 Deno 拒絕將原生 HTTP 服務器綁定添加進來,因為這還需要優化 TCP socket 層,更常見的是優化 op 接口。
Deno 是一個合適的異步服務器,每秒 25k 請求足以滿足大多數目的,此外,由于普遍使用 Promise,Deno 需要有更好的尾部延遲。目前 Deno HTTP 服務器每秒處理約 25 000 個請求,最大延遲為 1.3 毫秒,與之相比,Node 程序每秒處理 34 000 個請求,最大延遲介于 2 到 300 毫秒之間。
這樣看來,作者認為 Deno 的 HTTP 服務器還有更多的性能優勢,并表示希望在將來的版本中實現這一目標。
具體關于 HTTP 服務器性能,可以查看:
https://deno.land/benchmarks
插件/擴展
Deno 1.0 還帶來了一個新生的插件系統,用于通過自定義操作擴展 Deno 運行時。但是,此接口仍在開發中,并已標記為不穩定。
此外,發布公告中還提及 Deno 穩定性與兼容性等內容,還介紹了接下來將會把 TSC 移植到 Rust,最終加速類型檢查,提高從 TS 解析到 JS 性能的計劃,詳情查看:
https://deno.land/v1