摘要:長文預警字,圖。開發并不是因為,也不是為了取代。不知道從官方介紹來看,可以認為它是下一代是如何腦補出來的。只是一個原型或實驗性產品。所以,不是要取代,也不是下一代,也不是要放棄重建生態。的目前是要擁抱瀏覽器生態。
這幾天前端圈最火的事件莫過于 ry(Ryan Dahl) 的新項目 deno 了,很多 IT 新聞和媒體都用了標題:“下一代 Node.js”。這周末讀了一遍 deno 的源碼,特意寫了這篇文章。長文預警(5000字,11圖)。
0. 為什么開發 Deno?這是我上周做的一張圖,介紹了 JavaScript 的發展簡史。剛才修改了一下,添加了對 Node.js 和 Deno 發布時間的標注。
Node.js 和 Deno 分別是 Ryan Dahl 在 2009 年和 2018 年,基于當年最新的前端技術開發的非瀏覽器 JavaScript 運行時。
Ryan Dahl 開發 deno 并不是因為 “just for fun”,也不是為了取代 node。下面慢慢解釋。
1. 目前 deno 只是一個 demo這兩天花時間看了 deno 的源碼(好在是初級階段,源碼很少,也很容易理解),順帶看了所有的 issue 和 pr。不知道“從官方介紹來看,可以認為它是下一代 Node”是如何腦補出來的。
既然是 Node.js 之父的新作,在討論中自然離不開 Node.js。而作者很皮的回復到:
The main difference is that Node works and Deno does not work : )最大的區別就是:Node 可以工作,而 Deno 不行 : )
目前 Deno 只是一個 Demo,甚至連二進制發行版都沒有。好在從源碼編譯比較簡單(如果你使用的不是 Windows 系統)。
在 high-level 層面,Deno 提供了一個盡可能簡單的 V8 到系統 API 的綁定。為什么使用 Golang 替代 C++ 呢,因為相比 Node 而言,Golang 讓我們更加容易的添加新特性,比如 http2 等。
至于為什么不選擇 Rust,作者沒有回答。
我們再對比一下兩者的啟動性能。分別運行:
console.log("Hello world")
我之前寫過一篇文章:Node.js 新計劃:使用 V8 snapshot 將啟動速度提升 8 倍,那如果我們使用 --without-snapshot 參數編譯 Node.js 呢?
依然是相差懸殊,畢竟 deno 需要加載一個 TypeScript 編譯器。畢竟是一個 demo 版本,希望以后用力優化。
對于性能提升還有一個思路就是,可以使用 LLVM 作為后端編譯器把 TypeScript 代碼編譯為 WebAssembly 然后在 V8 里面運行,甚至可以直接把源碼編譯成二進制代碼運行。Ryan Dahl 表示 deno 只需要一個編譯器,那就是 TS。但是既然 deno 要兼容瀏覽器,那么 WebAssembly 應該也會被支持。
Deno 可以對 ts 的編譯結果進行緩存(~/.deno/cache),所以目前關注的就是啟動速度和初次編譯速度。
要么就是在發布前先行編譯,如此一來 deno 就脫離了開發的初衷了。deno 是一個 ts 的運行時,那么就應該可以直接運行 ts 代碼,如果提前把 ts 編譯成 js,那么 deno 就回退到 js 運行時了。
2. 初學者應該學習 Node.js 還是 Deno?對于這個問題,Ryan Dahl 的回答干凈利落:
Use Node. Deno is a prototype / experiment.使用 Node。Deno 只是一個原型或實驗性產品。
從介紹可以看到,Deno 的目標是不兼容 Node,而是兼容瀏覽器。
所以,Deno 不是要取代 Node.js,也不是下一代 Node.js,也不是要放棄 npm 重建 Node 生態。deno 的目前是要擁抱瀏覽器生態。
不得不說這個目標真偉大。Ryan Dahl 開發了 Node.js,社區構建出了整個 npm 生態。我在另一個回答 justjavac:純前端開發眼里nodejs到底是什么? 里面寫到“Node.js 是前端工程化的重要支柱之一”。
雖然后來 Ryan Dahl 離開 Node.js 去了 Golang 社區,但是現在 Ryan Dahl 又回來了,為 JavaScript 社區帶來了 Golang,開發出了 Deno,然后擁抱瀏覽器生態。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107951.html
摘要:里面有一句描述,可以看到的目標是兼容瀏覽器。那么這里的兼容瀏覽器到底如何是什么意思呢我簡單談談我的理解吧。很多人還有誤解以為兼容瀏覽器指的是會提供類似里的寫法。 Deno 里面有一句描述:Aims to be browser compatible,可以看到 Deno 的目標是兼容瀏覽器。那么這里的兼容瀏覽器到底如何是什么意思呢? 我簡單談談我的理解吧。 首先這里的兼容性肯定不是 Den...
摘要:自發布以來就備受關注,也有很多媒體和開發者稱為下一代。所以在寫這個插件之前,我又為寫了一個插件。插件提供了開箱即用的支持,開發者不需要任何配置,但是有一個前提是開發者需要使用內置的。 這幾天為 Deno 開發了一個 VS Code 插件:Deno support for VSCode,GitHub 地址:https://github.com/justjavac/...。 自 Deno ...
摘要:之父在中的設計錯誤演講中表示不允許將任意本地函數綁定至當中。所有系統調用都將通過消息傳遞完成序列化。兩項原生函數與。這既簡化了設計流程,又使得系統更易于審計。 Node之父ry:在Node中的設計錯誤演講中表示: 不允許將任意本地函數綁定至 V8 當中。 所有系統調用都將通過消息傳遞完成(protobuf 序列化)。 兩項原生函數:send 與 recv。 這既簡化了設計流程,又使得...
摘要:介紹是一個基于和的的安全運行時。文件中主要是的代碼,是功能的具體實現。圖來自于官網,圖的架構圖預告接下來還會有兩篇文章分析的內部原理 deno介紹 deno是一個基于v8、rust和Tokio的Javascript/Typescript的安全運行時。它在內部嵌入了一個typescript的編譯器。可以將typescript編譯成js然后運行在v8上,并通過c++ libdeno實現js...
閱讀 1627·2021-09-08 10:42
閱讀 3610·2021-08-11 10:23
閱讀 3981·2019-08-30 14:10
閱讀 2739·2019-08-29 17:29
閱讀 3097·2019-08-29 12:50
閱讀 646·2019-08-26 13:36
閱讀 3463·2019-08-26 11:59
閱讀 1494·2019-08-23 16:23