Node.js的勁敵來了:Deno是用於在Web瀏覽器之外執行JavaScript和TypeScript的執行環境
Deno是一個新的javascript非瀏覽器的執行環境,用於在Web瀏覽器之外執行JavaScript和TypeScript。這點非常類似Node.js。
Deno試圖提供一個獨立的工具來快速編寫複雜功能的指令碼。Deno是(並將始終是)單個可執行檔案。就像網路瀏覽器一樣,它知道如何獲取外部程式碼。在Deno中,單個檔案可以定義任意複雜的行為,而無需任何其他工具。
import { serve } from "https://deno.land/std@0.50.0/http/server.ts"; for await (const req of serve({ port: 8000 })) { req.respond({ body: "Hello World\n" }); } |
在這裡,將完整的HTTP伺服器模組作為依賴項新增到一行中。沒有其他配置檔案,沒有預先安裝deno run example.js。
與瀏覽器一樣,預設情況下,程式碼在安全的沙箱中執行。未經允許,指令碼無法訪問硬碟驅動器,開啟網路連線或進行任何其他潛在的惡意操作。瀏覽器提供了用於訪問相機和麥克風的API,但使用者必須首先授予許可權。Deno在終端中提供類似的行為。除非--allow-net提供命令列標誌,否則上面的示例將失敗。
與Node區別
Node是在JavaScript具有Promises或async / await概念之前設計的。Node所承諾的對手是EventEmitter,它基於重要的API,即套接字和HTTP。除了非同步/等待的人體工程學優勢外,EventEmitter模式還存在背壓問題。以TCP套接字為例。套接字在收到傳入資料包時將發出“資料”事件。這些“資料”回撥將以不受限制的方式發出,從而使事件充滿整個過程。由於Node繼續接收新的資料事件,因此基礎TCP套接字沒有適當的背壓,因此遠端傳送方不知道伺服器已超負荷並繼續傳送資料。為了減輕這個問題,pause()方法已新增。這可以解決問題,但是需要額外的程式碼;而且由於泛洪問題僅在程式非常繁忙時才會出現,因此許多Node程式都可能被資料泛洪。結果是系統的尾部延遲時間很長。
在Deno中,套接字仍然是非同步的,但是接收新資料需要使用者顯式地進行read()。正確構造接收套接字不需要額外的暫停語義。這不是TCP套接字獨有的。系統的最低繫結層從根本上與承諾相關聯-我們稱這些繫結為“ ops”。Deno中以某種形式出現的所有回撥均來自promise。
Rust有其自己的類似於承諾的抽象,稱為Futures。透過“ op”抽象,Deno使將Rust未來的API繫結到JavaScript promise中變得容易。
重要的是:要了解Deno不是Node的分支-它是一個全新的實現。Deno的開發僅兩年時間,而Node的開發已超過十年。考慮到對Deno的興趣,我們希望它會繼續發展和成熟。
我們不斷跟蹤Deno的HTTP伺服器的效能。HelloWorld的Deno HTTP伺服器每秒處理約25,000個請求,最大延遲為1.3毫秒。一個可比的Node程式每秒處理34,000個請求,最大延遲介於2到300毫秒之間。
Deno的HTTP伺服器是在本機TCP套接字頂部的TypeScript中實現的。Node的HTTP伺服器使用C語言編寫,並作為對JavaScript的高階繫結公開。我們一直拒絕將本地HTTP伺服器繫結新增到Deno的衝動,因為我們要最佳化TCP套接字層,更常見的是最佳化op介面。
相關文章
- 從瀏覽器環境到JavaScript執行流程的一次簡單梳理瀏覽器JavaScript
- 淺談瀏覽器執行環境下的event loop機制瀏覽器OOP
- JavaScript執行環境與執行棧JavaScript
- Ooui:在瀏覽器中執行.NET應用UI瀏覽器
- JS在瀏覽器中的執行機制JS瀏覽器
- 瀏覽器多執行緒和js單執行緒瀏覽器執行緒JS
- 在瀏覽器中執行vscode -DEV瀏覽器VSCodedev
- 瀏覽器執行javaScript程式碼基礎瀏覽器JavaScript
- JavaScript在瀏覽器環境中的非同步JavaScript瀏覽器非同步
- 瀏覽器執行緒瀏覽器執行緒
- 瀏覽器執行原理瀏覽器
- 1-1 JavaScript執行環境 執行棧JavaScript
- 在 vscode.dev 中直接執行 Python !純瀏覽器環境,無後端!VSCodedevPython瀏覽器後端
- 在 Node.js 上執行 Flutter Web 應用和 APINode.jsFlutterWebAPI
- 通過 WebAssembly 在瀏覽器執行 PHPWeb瀏覽器PHP
- JavaScript 執行機制-瀏覽器事件迴圈JavaScript瀏覽器事件
- 【譯】Go和WebAssembly:在瀏覽器中執行Go程式GoWeb瀏覽器
- 大資料執行環境的執行大資料
- JavaScript執行環境及作用域JavaScript
- Netweaver和CloudFoundry是如何執行Web應用的?CloudWeb
- 詳細判斷瀏覽器執行環境(可能是最全的判斷,值得一看)瀏覽器
- 重學瀏覽器(1)-多程式多執行緒的瀏覽器瀏覽器執行緒
- 原來JavaScript是這樣執行的JavaScript
- 基於Chromium的微軟Edge瀏覽器在Windows 7上也執行良好微軟瀏覽器Windows
- 部署基於Dragonwell的Java執行環境GoJava
- 【Net】CEF瀏覽IISExpress執行Web專案ExpressWeb
- 【總結】瀏覽器的執行緒與程式瀏覽器執行緒
- 4個用於在雲原生環境中執行虛擬機器的開源工具虛擬機開源工具
- JavaScript在瀏覽器環境下的事件迴圈(Event Loop)JavaScript瀏覽器事件OOP
- 從程式和執行緒瞭解瀏覽器的工作原理執行緒瀏覽器
- 瀏覽器渲染程式多執行緒瀏覽器執行緒
- 瀏覽器EventLoop執行過程解析瀏覽器OOP
- Deno 執行時入門教程:Node.js 的替代品Node.js
- 在Grammarly的生產環境中執行LispLisp
- 瀏覽器執行緒執行順序,瞭解一下瀏覽器執行緒
- 關於瀏覽器裡事件的捕獲和冒泡及監聽器執行的順序瀏覽器事件
- 靜態變數在多執行緒環境下的初始化是執行緒安全的嗎?變數執行緒
- Gradio-Lite: 完全在瀏覽器裡執行的無伺服器 Gradio瀏覽器伺服器