精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Deno并不是下一代Node.js

開發 前端
這幾天前端圈最火的事件莫過于 ry(Ryan Dahl) 的新項目 deno 了,很多 IT 新聞和媒體都用了標題:“下一代 Node.js”。這周末讀了一遍 deno 的源碼,特意寫了這篇文章。

這幾天前端圈最火的事件莫過于 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,作者沒有回答。

我們再對比一下兩者的啟動性能。分別運行: 

  1. 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,然后擁抱瀏覽器生態。👍

我們看看 deno 的關于 Web API 的目標:

  • High level
    • Console √
    • File/FileList/FileReader/Blob
    • XMLHttpRequest
    •  WebSocket
  • Middle level
    • AudioContext/AudioBuffer
    • Canvas

甚至還會包括 webGL 和 GPU 等的支持。

3. Deno 的架構

Parsa Ghadimi 繪制了一張關于 Deno 的架構圖

 

底層使用了作者開發的 v8worker2,而 event-loop 則基于 pub/sub 模型。關于 v8worker 可以看看這個 PPT:https://docs.google.com/prese...

我比較好奇的是 deno 使用了 protobuf,而沒有使用 Mojo。既然目標是要兼容瀏覽器,卻不使用 Mojo,而是要在 protobuf 上重新造輪子,可見 Ryan Dahl 是真正的“輪子哥”啊。但是從 issue 中可以看出,Ryan Dahl 之前是沒有聽說過 Mojo 的,但是他看完 mojo 之后,依然覺得 protobuf 的選擇是正確的。

Mojo 是 Google 開發的新一代 IPC 機制,用以替換舊的 Chrome IPC。目前 Chrome 的***版本是 67,而 Google 的計劃是在 2019 年的 75 版本用 mojo 替換掉所有的舊的 IPC。

Mojo 的思路確實和 protobuf 畢竟像,畢竟都是 Google 家的。舊的 IPC 系統是基于在 2 個進程(線程)之間的命名管道(IPC::Channel)實現的。這個管道是一個隊列,進程間的 IPC 消息按照先進先出的順序依次傳遞,所以不同的 IPC 消息之間有先后次序的依賴。相比之下,Mojo 則為每一個接口創建了一個獨立的消息管道,確保不同接口的 IPC 是獨立的。而且為接口的創建獨立的消息管道的代價也并不昂貴,只需分配少量的堆內存。

Mojo 的架構設計:

 

我們可以看一下 Chrome 引入 Mojo 之后的架構變化。

之前:

 

之后:

 

是不是有點微服務的感覺。

熟悉 Java 的 Spring 的可以明顯看出這個依賴倒置。Blink 本來是瀏覽器***層的排版引擎,通過 Mojo,Blink 變成了要給中間模塊。最近大熱的 Flutter 也是基于 Mojo 架構的。

4. TypeScript VS JavaScript

deno 的介紹是一個安全的 TypeScript 運行環境。但是我們看源碼就會發現,deno 集成進了一個 TypeScript 編譯器,而入口文件中 ry/deno:main.go 

  1. // It's up to library users to call   
  2. // deno.Eval("deno_main.js""denoMain()")   
  3. func Eval(filename string, code string) {   
  4.     err := worker.Load(filename, code)   
  5.     exitOnError(err)   
  6. } // It's up to library users to call  
  7. // deno.Eval("deno_main.js""denoMain()")  
  8. func Eval(filename string, code string) {  
  9.     err := worker.Load(filename, code)  
  10.     exitOnError(err)  

使用 V8 運行的 deno_main.js 文件。是 JavaScript 而不是 TypeScript 。

在前面的分析中我們知道這會影響 deno 的初次啟動速度。那么對于執行速度呢?從理論上,TypeScript 作為一種靜態類型語言,編譯完成的 JavaScript 代碼會有更快的執行速度。我之前在《前端程序員應該懂點V8 知識》曾經提到過 V8 對于 JavaScript 性能提升有一項是 Type feedback。

當 V8 執行一個函數時,會基于函數傳入的實參(注意是實參,而不是形參,因為 JavaScript 的形參是沒有類型的)進行即時編譯(JIT):

 

但是當后面再次以不同的類型調用函數時,V8 會進行去優化(Deopt)操作。

(將之前優化完的結果去掉,稱為“去優化”)

 

但是如果我們使用 TypeScript ,所有的參數都是由類型標注的,因此可以防止 V8 引擎內部執行去優化操作。

5. 對 deno 性能的展望和猜想

雖然 TypeScript 可以避免 V8 引擎的去優化操作,但是 V8 執行的是 ts 編譯后的結果,我們通過字節碼或者機器碼可以看到,V8 依然生成了 Type Check 的代碼,每次調用函數之前,V8 都會對實參的類型進行檢查。也就是說,雖然 TypeScript 保證了函數的參數類型,但是編譯成 JavaScript 之后,V8 并不能確定函數的參數類型,只能通過每次調用前的檢查來保證參數的類型。

其次,當 V8 遇到函數定義時,并不知道參數的類型,而只有函數被調用后,V8 才能判斷函數的類型,才對函數進行 Typed 即時編譯。這里又有一個矛盾了,typescript 在函數定義時就已經知道了形參的類型,而 V8 只有在函數調用時才根據實參的類型進行優化。

所以,目前 deno 的架構還存在很多問題,畢竟只是一個 demo。未來還有很多方向可以優化。

V8 是一個 JavaScript 運行時,而 deno 如果定義為“安全的 TypeScript 運行時”,至少在目前的架構上,性能是有很大損失的。但是目前還不存在一個 TypeScript 運行時,退而求其次只能在 V8 前面放一個 TypeScript 編譯器了。

執行流程是這樣的:

 

雖然我在項目中沒有使用過 TypeScript ,但是基本上我在項目里面寫的第三方庫都會提供一d.ts 文件。目前 TypeScript ***的用途還是體現在開發和維護過程中。

我們想到的一個方式就是 fork 一份 V8 的源碼,然后把編譯流程整合進去。TypeScript 在編譯為 JavaScript 的過程中也需要一份 AST,然后生成 js 代碼。V8 執行 js 代碼是再 parse 一份 AST,基于 AST 生成中間代碼(ByteCode)。如果 TypeScript 可以直接生成對用的字節碼則會提升運行時的性能。

不過 Ryan Dahl 大概不會這么干。但是也未必,畢竟社區已經把 TypeScript 的一個子集編譯為 WebAssembly 了。

之前微軟的 JScript 和 VBScript 在和 JavaScript 的競爭中敗下陣來,而現在 TypeScript 勢頭正猛。雖然對 ES 規范的兼容束縛了 TypeScript 的發展,但很期待微軟可以提供一個 TS 運行時,或者在 Chakra 引擎增加對 TS 運行時的支持。

6. 總結

不論如何,deno 是一個非常偉大的項目,但卻不是“下一代 Node.js”。

PS:昨天 Ryan Dahl 在 JS Conf 做了《Design Mistakes in Node》的演講,目前只有 PPT,還沒有 Youtube 視頻。而 8 年前的 2009 年,Ryan Dahl 也在 JS Conf 做了一次演講,這次演講誕生了 Node.js。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2011-03-23 09:18:52

LAMPnode.js

2013-07-27 21:28:44

2025-09-08 06:30:00

Fresh框架開發

2013-06-27 11:21:17

2025-01-03 09:24:10

模型架構論文

2020-09-16 10:28:54

邊緣計算云計算數據中心

2020-09-27 17:27:58

邊緣計算云計算技術

2020-05-20 09:26:59

Node.jsDenoJavaScript

2022-03-04 07:37:16

DenoNode.js項目

2013-09-09 16:28:36

2016-01-26 11:58:12

2012-07-16 10:08:31

下一代ITBYOD

2012-12-10 16:15:43

下一代防火墻NGWF

2023-04-28 10:02:50

2020-06-02 08:05:28

智能電表蜂窩物聯網NB-IoT

2021-05-22 23:01:21

人工智能網絡安全

2024-02-26 14:46:53

移動計算人工智能5G

2015-10-15 10:30:32

2013-05-10 09:36:04

下一代網絡銳捷網絡簡網絡

2012-07-16 09:27:19

BYOD下一代IT
點贊
收藏

51CTO技術棧公眾號

日韩高清成人| 午夜激情小视频| 99精品全国免费观看视频软件| 欧美三级午夜理伦三级中视频| 神马影院午夜我不卡影院| 在线亚洲欧美日韩| 欧美va天堂在线| 亚洲福利在线视频| 男女午夜激情视频| 欧美特级黄色录像| 成人一级视频| 夜夜精品视频一区二区| 欧美精品一区二区三区久久| 91精品国产综合久| 亚洲国产专区| 神马久久桃色视频| 97精品人人妻人人| 三级成人黄色影院| 亚洲综合偷拍欧美一区色| 免费av一区二区三区| 在线免费a视频| 欧美精品网站| 日韩激情片免费| 视频免费1区二区三区 | 国产在线视频不卡二| 欧美激情亚洲另类| 日韩女同一区二区三区| 国产精品国产| 91黄视频在线观看| 男人天堂a在线| 国产区一区二区三| 天天av综合| 亚洲欧美国产精品专区久久| 韩国三级丰满少妇高潮| 桃子视频成人app| 亚洲国产日韩综合久久精品| 亚洲亚洲精品三区日韩精品在线视频| 欧美 日韩 国产 成人 在线 91| 日本vs亚洲vs韩国一区三区二区| 国产综合在线看| 亚洲一级生活片| 欧美色图在线播放| 日韩精品极品视频| 老司机av网站| 牛牛电影国产一区二区| 久久精品无码一区二区三区| 激情小说网站亚洲综合网 | 青青草视频在线免费直播| 日本一区二区三区在线不卡| 精品欧美一区二区久久久伦| 精品黑人一区二区三区国语馆| 美美哒免费高清在线观看视频一区二区| 97视频在线观看播放| 可以直接看的黄色网址| 外国成人激情视频| 日韩网站免费观看| 懂色av粉嫩av浪潮av| 国内精品伊人久久久| 国产午夜精品麻豆| 中文字幕在线免费看线人| 国产乱人伦丫前精品视频| 日韩欧美国产一区二区三区 | 三级成人黄色影院| 欧美性猛交xxxx免费看久久久| 欧美午夜小视频| h片视频在线观看| 一区二区三区四区在线免费观看| 400部精品国偷自产在线观看| 精品黄色免费中文电影在线播放| 国产精品天美传媒沈樵| 亚洲国产精品久久久久久女王| sese一区| 国产精品女同互慰在线看| 亚洲精品成人a8198a| 超碰免费97在线观看| 国产精品久久网站| 久久天天东北熟女毛茸茸| 日本精品600av| 亚洲图片自拍偷拍| 国模无码视频一区二区三区| 中文一区一区三区高中清不卡免费| 婷婷丁香久久五月婷婷| 成人免费在线小视频| 日韩福利一区| 4438成人网| youjizz.com日本| 日本妇女一区| 中文字幕亚洲自拍| 欧美三级在线免费观看| 极品尤物久久久av免费看| 97人人做人人爱| 黄色av一级片| 国产制服丝袜一区| 国产欧美韩日| 高潮无码精品色欲av午夜福利| 日韩av电影免费观看高清完整版| 国产在线精品一区免费香蕉| 亚洲精品无码久久久| 99精品久久只有精品| 亚欧洲精品在线视频免费观看| 国产写真视频在线观看| 五月婷婷欧美视频| 亚洲黄色小视频在线观看| 久久久久久亚洲精品美女| 亚洲精品一线二线三线无人区| 91中文字幕永久在线| 2023国产精品久久久精品双| 韩国三级日本三级少妇99| 乱子伦一区二区三区| 国产精品自在在线| 欧美主播一区二区三区美女 久久精品人 | av成人手机在线| 亚洲一区国产视频| 成年人网站大全| 亚洲网一区二区三区| 亚洲视频在线观看| 国产主播在线播放| 久久99精品国产麻豆婷婷| 国产精品一区在线观看| 日本视频在线| 色婷婷久久久亚洲一区二区三区| 中文字幕第10页| 欧美日一区二区| 隔壁老王国产在线精品| 在线观看不卡的av| 久久综合狠狠综合| 波多野结衣 作品| 久久伊人国产| 亚洲人成自拍网站| 久久久久久av无码免费网站| 美腿丝袜一区二区三区| 久久99精品久久久久久久久久| 黄色片网站在线观看| 色婷婷久久99综合精品jk白丝| 日韩大尺度视频| 国产精品videosex性欧美| 日韩av片永久免费网站| 欧美一级视频免费| 亚洲精品国产无天堂网2021 | 久久精品一二三区| 国产啊啊啊视频在线观看| 欧美日韩一区久久| 日韩中文字幕有码| 99在线|亚洲一区二区| 成人资源av| caopo在线| 91精品国产综合久久福利软件| av永久免费观看| 日日夜夜免费精品视频| 久久精品日韩| 欧美大片高清| 亚洲人成亚洲人成在线观看| 特黄视频免费看| 91在线视频观看| 男人日女人下面视频| 国内精品偷拍| 欧美二区乱c黑人| 亚洲国产www| 亚洲一二三区不卡| 国产精品嫩草69影院| 国产一区日韩一区| 国产精品二区三区四区| 国产盗摄精品一区二区酒店| 亚洲国产精品va在线观看黑人| 亚洲国产精一区二区三区性色| 成人午夜电影网站| 精品人妻少妇一区二区| 日韩av系列| 日韩美女视频免费看| 成全电影播放在线观看国语| 欧美日韩国产免费一区二区| 亚洲欧美精品aaaaaa片| 国产风韵犹存在线视精品| www.亚洲成人网| 久久精品色综合| 日产精品99久久久久久| aiai在线| 欧美刺激脚交jootjob| 日韩免费av片| 久久精品在这里| 黄大色黄女片18第一次| 欧美在线看片| 国精产品一区二区| 欧美aaa视频| 麻豆成人在线看| 天天躁日日躁狠狠躁伊人| 91激情五月电影| 538精品在线观看| 久久综合五月天婷婷伊人| 黄色片视频在线| 欧美日韩亚洲一区| 欧美久久综合性欧美| 日本午夜免费一区二区| 久久久久久国产精品三级玉女聊斋 | 制服丝袜亚洲播放| 国产精品.www| 国产99久久久国产精品| 欧美日韩黄色一级片| 国产精品15p| 国产精品mp4| 超碰人人在线| 精品国产亚洲在线| 成人毛片一区二区三区| 中文字幕一区二区三区蜜月| wwwww在线观看| 男人天堂欧美日韩| 中文字幕在线中文字幕日亚韩一区| 一区二区在线免费播放| 538国产精品一区二区在线 | 92国产精品观看| 国产又黄又猛又粗| 伊人久久大香线蕉综合热线| 欧洲久久久久久| 国产精品美女久久久久| 97在线视频免费| 国产一级片在线播放| 制服丝袜中文字幕一区| 久久久久久久久久久久久久av| 国产免费观看久久| 动漫美女无遮挡免费| 日本视频在线一区| 久久综合久久久久| 精品大片一区二区| 成人激情视频在线播放| 在线观看福利电影| 久久精品视频播放| 国产福利片在线| 精品国产99国产精品| 正在播放木下凛凛xv99| 亚洲大片在线观看| 欧美在线视频第一页| 91丨九色丨国产丨porny| 超碰中文字幕在线观看| 视频在线观看一区二区三区| 欧美日韩成人免费视频| 婷婷色综合网| 日韩av电影免费在线| 99re91这里只有精品| 91免费在线观看网站| 高清在线一区| 欧美在线视频观看| bt在线麻豆视频| 久久婷婷国产麻豆91天堂| 精品久久av| 亚洲国产精品va在线看黑人| а√中文在线资源库| 日本精品视频一区二区三区| 久久夜靖品2区| 亚洲黄色尤物视频| 久久精品一区二区三区四区五区| av电影天堂一区二区在线 | 亚洲国产尤物| 欧美与黑人午夜性猛交久久久| 韩国成人免费视频| 久久91超碰青草是什么| 国产美女av在线| www.日韩免费| 网友自拍视频在线| 日日噜噜噜夜夜爽亚洲精品 | 国产麻豆精品| 成人黄色在线观看| 国产va免费精品观看精品| 欧美与黑人午夜性猛交久久久| 青青青免费在线视频| 久久久久久综合网天天| 久久香蕉av| 亚洲91av视频| 国产污视频在线播放| 性欧美xxxx| 欧美13videosex性极品| 2019中文字幕在线观看| 人在线成免费视频| 国产99在线|中文| 日韩影片中文字幕| 国产精品一久久香蕉国产线看观看| 精品乱码一区二区三区四区| 国产精品一区二区在线| 日日夜夜综合| 国产欧美欧洲在线观看| 亚瑟国产精品| 91视频99| 久久91在线| 无码免费一区二区三区免费播放 | 中文字幕中文字幕在线中一区高清 | 亚洲老司机在线| 欧美成人免费看| 亚洲一区二三区| 无码免费一区二区三区| 欧美视频一区二区三区| 国产又黄又粗又硬| 亚洲精品一区二区三区影院 | 国产a亚洲精品| 成人在线中文字幕| av不卡一区| 国产精品对白刺激久久久| 精品国产网站| 久久天天东北熟女毛茸茸| 亚洲国产精品第一区二区| 日本va中文字幕| 精品一区二区三区不卡| 动漫美女无遮挡免费| 国产精品婷婷午夜在线观看| 国产精品成人免费观看| 欧美性猛交xxxx黑人猛交| 波多野结衣 久久| 欧美成人a∨高清免费观看| 日本精品专区| 久久精品一区中文字幕| 欧美激情网站| 91精品中国老女人| 日韩手机在线| 国产乱子伦精品视频| 久久国产一二区| 色姑娘综合天天| 97精品国产露脸对白| 91嫩草丨国产丨精品| 精品久久久一区二区| 91亚洲国产成人精品一区| 亚洲精品网址在线观看| 超碰在线免费公开| 日本中文字幕久久看| 久久精品色综合| 97超碰免费观看| 免费看的黄色欧美网站| 久久精品无码专区| 国产精品毛片a∨一区二区三区| 国产一级在线播放| 欧美无砖专区一中文字| 日韩成人黄色| 欧美人与物videos| 国产精品久久久久久妇女| 久久精品成人一区二区三区蜜臀| 亚洲国产一区二区在线观看 | 久久久久高清| 欧美a级在线| 色一情一区二区| 欧美激情在线一区二区三区| 日本中文字幕在线免费观看| 91麻豆精品国产91久久久| caoporn国产精品免费视频| 性亚洲最疯狂xxxx高清| 日本精品在线播放| 欧美爱爱视频网站| 日日摸夜夜添夜夜添国产精品| xxxwww国产| 亚洲日本青草视频在线怡红院| 亚洲一区二区色| 亚洲色图狂野欧美| 亚洲天堂电影| 蜜桃av色综合| 亚洲精品孕妇| av漫画在线观看| 亚洲电影在线播放| 亚洲男人第一天堂| 欧美疯狂性受xxxxx另类| 日韩三级精品| 公共露出暴露狂另类av| 久久精品国产精品青草| 亚洲AV成人无码网站天堂久久| 欧美综合视频在线观看| 日韩av视屏| 国产国语videosex另类| 在线日本制服中文欧美| 久草青青在线观看| 久久久电影一区二区三区| 日韩不卡视频在线| 日韩精品免费在线播放| 欧美亚洲韩国| 日韩精品一线二线三线| 丝袜亚洲精品中文字幕一区| 免费黄色在线网址| 欧美三级乱人伦电影| 69久久久久| 91丝袜脚交足在线播放| 欧美va天堂| 国产亚洲精品成人a| 欧美日韩精品在线| 欧美视频综合| 国产精品美女www爽爽爽视频| 久久久久亚洲| 精品国产aⅴ一区二区三区东京热| 亚洲成人7777| 手机在线不卡av| 国产91色在线|免| 日韩精品一区二区久久| 肉丝美足丝袜一区二区三区四| 亚洲成人在线网站| 爽爽视频在线观看| 国产日韩欧美另类| 综合色一区二区| 99热超碰在线| 欧美亚男人的天堂| 国产日产一区二区三区| 福利精品视频| 日韩电影在线看| 国产天堂av在线| 亚洲欧美日韩国产中文专区| 色猫猫成人app| 路边理发店露脸熟妇泻火| 91在线丨porny丨国产|