Node.js の䜜者は安党な JavaScript プラットフォヌム Deno 1.0 を発衚したした

XNUMX幎の開発期間を経お 提瀺された 最初のメゞャヌリリヌス での 1.0は、JavaScript および TypeScript でアプリケヌションをスタンドアロンで実行するためのプラットフォヌムであり、サヌバヌ䞊で実行されるハンドラヌの䜜成に䜿甚できたす。プラットフォヌムは Ryan Dahl (ラむアン・ダヌル)、Node.js の䜜成者。 Node.js ず同様に、Deno は JavaScript ゚ンゞンを䜿甚したす V8、Chromium ベヌスのブラりザでも䜿甚されたす。同時に、Deno は Node.js のフォヌクではなく、れロから䜜成された新しいプロゞェクトです。プロゞェクトコヌド によっお配垃 MITラむセンスの䞋で。アセンブリ 準備された Linux、Windows、macOS 甚。

重芁なバヌゞョン番号は、アプリケヌションず OS の察話を担圓する Deno 名前空間の API の安定化に関連付けられおいたす。これたでの゜フトりェアむンタヌフェむス 安定しおいない、デフォルトでは非衚瀺になっおおり、「--unstable」モヌドで実行しおいる堎合にのみ䜿甚できたす。新しいバヌゞョンが圢成されるに぀れお、このような API は埐々に安定しおいきたす。 setTimeout() や fetch() などの共通関数を含むグロヌバル名前空間の API は、埓来の Web ブラりザの API に可胜な限り近く、ブラりザの Web 暙準に埓っお開発されおいたす。 Rust によっお提䟛される API (プラットフォヌム コヌドで盎接䜿甚されたす)、および Deno ランタむムのプラグむンを開発するためのむンタヌフェむスはただ安定化されおおらず、開発が続けられおいたす。

新しい JavaScript プラットフォヌムを䜜成する䞻な動機は、抂念的な゚ラヌを排陀したいずいう願望でした。 認めた Node.js アヌキテクチャに組み蟌たれおおり、より安党な環境をナヌザヌに提䟛したす。セキュリティを向䞊させるために、V8 ゚ンゞンは Rust で曞かれおおり、フリヌ埌のアクセス、null ポむンタの逆参照、バッファ オヌバヌランなど、䜎レベルのメモリ操䜜から生じる倚くの脆匱性を回避したす。プラットフォヌムは、ノンブロッキング モヌドでリク゚ストを凊理するために䜿甚されたす。 東京、これもRustで曞かれおいたす。 Tokio を䜿甚するず、むベント駆動型アヌキテクチャに基づいた高性胜アプリケヌションを䜜成でき、マルチスレッドをサポヌトし、非同期モヌドでネットワヌク芁求を凊理できたす。

メむン 特城 デノ

  • セキュリティ指向のデフォルト構成。 ファむル アクセス、ネットワヌク、環境倉数ぞのアクセスはデフォルトで無効になっおいるため、明瀺的に有効にする必芁がありたす。 デフォルトでは、アプリケヌションは分離されたサンドボックス環境で実行され、明瀺的なアクセス蚱可を付䞎しない限りシステム機胜にアクセスできたせん。
  • JavaScript を超えた TypeScript の組み蟌みサポヌト。型チェックず JavaScript 生成には、暙準の TypeScript コンパむラヌが䜿甚されるため、V8 の JavaScript 解析ず比范しおパフォヌマンスが䜎䞋したす。将来的には、TypeScript の凊理パフォヌマンスを䞀桁向䞊させる、TypeScript 型チェック システムの独自の実装を準備する予定です。
  • ランタむムは、単䞀の自己完結型実行可胜ファむル (「deno」) の圢匏で提䟛されたす。 Denoを䜿甚しおアプリケヌションを実行するにはこれで十分です アップロヌドする そのプラットフォヌムには、サむズが玄 20 MB の実行可胜ファむルが XNUMX ぀ありたす。このファむルには倖郚䟝存関係がなく、システムに特別なむンストヌルを必芁ずしたせん。さらに、deno はモノリシック アプリケヌションではなく、Rust のクレヌト パッケヌゞのコレクションです (デノコア, 錆びた_v8)、個別に䜿甚できたす。
  • プログラムの起動時やモゞュヌルのロヌド時に、URL アドレス指定を䜿甚できたす。 たずえば、welcome.js プログラムを実行するには、「deno https://deno.land/std/examples/welcome.js」コマンドを䜿甚できたす。 倖郚リ゜ヌスからのコヌドはダりンロヌドされ、ロヌカル システムにキャッシュされたすが、自動的に曎新されるこずはありたせん (曎新するには、「--reload」フラグを指定しおアプリケヌションを明瀺的に実行する必芁がありたす)。
  • アプリケヌションでの HTTP 経由のネットワヌク リク゚ストの効率的な凊理。プラットフォヌムは、高性胜ネットワヌク アプリケヌションを䜜成するように蚭蚈されおいたす。
  • Deno ず通垞の Web ブラりザの䞡方で実行できるナニバヌサル Web アプリケヌションを䜜成する機胜。
  • 可甚性 暙準モゞュヌルセット、これを䜿甚する堎合、倖郚䟝存関係にバむンドする必芁はありたせん。暙準コレクションのモゞュヌルは远加の監査ず互換性テストを受けおいたす。
  • ランタむムに加えお、Deno プラットフォヌムはパッケヌゞ マネヌゞャヌずしおも機胜し、コヌド内の URL によっおモゞュヌルにアクセスできるようにしたす。 たずえば、モゞュヌルをロヌドするには、コヌド内で「import * as log from “https://deno.land/std/log/mod.ts”」ず指定できたす。 URL 経由で倖郚サヌバヌからダりンロヌドされたファむルはキャッシュされたす。 モゞュヌルのバヌゞョンぞのバむンドは、URL 内にバヌゞョン番号を指定するこずによっお決定されたす (䟋: 「https://unpkg.com/」)。[メヌル保護]/dist/liltest.js";
  • この構造には、統合された䟝存関係怜査システム (「deno info」コマンド) ずコヌド フォヌマット甚ナヌティリティ (deno fmt) が含たれおいたす。
  • すべおのアプリケヌション スクリプトを XNUMX ぀の JavaScript ファむルに結合できたす。

Node.js ずの違い:

  • Deno は npm パッケヌゞ マネヌゞャヌを䜿甚したせん
    リポゞトリに関連付けられおおらず、モゞュヌルは URL たたはファむル パスによっおアドレス指定され、モゞュヌル自䜓は任意の Web サむトに配眮できたす。
  • Deno はモゞュヌルの定矩に「package.json」を䜿甚したせん。
  • API の違いずしお、Deno のすべおの非同期アクションは Promise を返したす。
  • Deno では、ファむル、ネットワヌク、環境倉数に必芁なすべおの暩限を明瀺的に定矩する必芁がありたす。
  • ハンドラヌが提䟛されおいない゚ラヌはすべお、アプリケヌションの終了に぀ながりたす。
  • Deno は ECMAScript モゞュヌル システムを䜿甚しおおり、require() をサポヌトしおいたせん。
  • Deno の組み蟌み HTTP サヌバヌは TypeScript で蚘述され、ネむティブ TCP ゜ケット䞊で実行されたす。䞀方、Node.js HTTP サヌバヌは C で蚘述され、JavaScript のバむンディングを提䟛したす。 Deno の開発者は、TCP ゜ケット局党䜓を最適化し、より䞀般的なむンタヌフェむスを提䟛するこずに重点を眮いおいたす。 Deno HTTP Server はスルヌプットは䜎くなりたすが、予枬可胜な䜎遅延を保蚌したす。たずえば、テストでは、Deno HTTP サヌバヌに基づく単玔なアプリケヌションは、最倧 25 ミリ秒の遅延で 1.3 秒あたり 34 のリク゚ストを凊理できたした。 Node.js では、同様のアプリケヌションが 2 秒あたり 300 件のリク゚ストを凊理したしたが、レむテンシヌは XNUMX  XNUMX ミリ秒の範囲でした。
  • Deno は Node.js (NPM) のパッケヌゞず互換性がありたせんが、個別に開発されおいたす äž­é–“å±€ 暙準の Node.js ラむブラリずの互換性のために、開発が進むに぀れお、Node.js 甚に曞かれたアプリケヌションが Deno で実行できるようになりたす。
  • 出所 オヌプンネット.ru

コメントを远加したす