Was ist Deno und wird es Node.js ersetzen?



Schönen Tag. Ich präsentiere Ihnen die Übersetzung des Artikels „Deno vs. Node.js - Hier sind die wichtigsten Unterschiede “ von Louis Petrik.

Ist Deno der neue Node.js? Oder nur eine gute Alternative? In diesem Artikel werde ich versuchen, diese Fragen zu beantworten.

Geschichte von Deno


Deno und Node.js arbeiten von einer Person - Ryan Dahl.

Dahl arbeitet seit 2009 an Node.js, verließ das Team jedoch nach einigen Jahren. Im Jahr 2018 hielt er eine Präsentation mit dem Titel „10 Dinge, die ich an Node.js bedauere“. In diesem Vortrag stellte Dahl Deno vor - eine neue „Engine“ für JavaScript und TypeScript.

Unterhaltsame Tatsache: „Deno“ ist ein Anagramm für „Node“.

Sollten Entwickler befürchten, dass Deno Node.js in naher Zukunft ersetzen wird?

Dahl selbst glaubt nein.



Link zum Video.

Wie Dahl in seiner Rede feststellt, ist Deno Node.js in seiner Vollständigkeit (Stabilität) immer noch unterlegen.

Bei beiden handelt es sich jedoch um JS-Codelaufzeiten außerhalb des Browsers, z. B. auf einem Webserver. Aber kaum jemand kann sagen, wie sich die "Beziehung" zwischen Node.js und Deno in einigen Jahren entwickeln wird.

Deno und Node.js: internes Gerät


Node.js ist in C ++ geschrieben und verwendet V8, um JS-Code auszuführen. V8 wurde speziell für Google Chrome entwickelt, um JS-Code so schnell wie möglich im Browser auszuführen. Derzeit haben fast alle Browser, einschließlich Microsoft Edge, auf V8 umgestellt.

Deno basiert ebenfalls auf V8, verwendet jedoch anstelle von C ++ Rust, eine Sprache, deren Ziel nicht nur eine gute Leistung ist, die C ++ nicht unterlegen ist, sondern auch Sicherheit: Beseitigung von Speicherzugriffsfehlern oder Pufferüberläufen.

Sicherheit ist einer der Hauptnachteile von Node.js, da es nach dem Start der Anwendung Zugriff auf das Dateisystem oder das Netzwerk erhält.

Deno versucht, dies zu beheben, indem der Benutzer um Erlaubnis zum Zugriff gebeten wird.

Ein gutes Beispiel ist der folgende TS-Code von der offiziellen Website von Deno:

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

const s = serve({ port: 8000 })

for await (const req of s) {
	req.respond({ body: 'Hello World\n'})
}

Wie Sie sehen, handelt es sich um einen sehr einfachen Webserver, der folgendermaßen startet:

deno run app.ts

Da Deno jedoch keine Berechtigung zum Zugriff auf das Netzwerk erteilt wird, wird die folgende Meldung angezeigt:



Um den Zugriff bereitzustellen, müssen wir Folgendes tun:

deno run --allow-net app.ts

Jetzt funktioniert unser Server. Die Anwendung hat jedoch erst dann Zugriff auf das Dateisystem, wenn wir dies zulassen.

Auf Wiedersehen NPM, hallo ES6 Import


Ein weiteres Sicherheitsproblem für unsere Anwendungen ist NPM: Durch die Verwendung von NPM wird nicht nur ein riesiger Ordner "node_modules" erstellt, sondern auch installierte Pakete, mit denen die Anwendung funktioniert, können theoretisch schädlichen Code enthalten.

Deno verwendet kein NPM, stattdessen werden Bibliotheken über eine URL importiert, wie im Beispiel gezeigt.

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

Die Bibliothek wird beim ersten Ausführen geladen und zwischengespeichert:



Dies ähnelt dem Kopieren des Codes für unseren Webserver und dessen separate Speicherung auf dem Server oder Computer zur Wiederverwendung. Bibliotheken müssen nicht neu geladen werden.

Fensterobjekt außerhalb des Browsers


Window ist ein globales Objekt im Browser, das einige sehr wichtige JS-Funktionen enthält.

Eine solche Funktion ist das Abrufen. Fecth kann nicht in Node.js verwendet werden - es gibt spezielle Bibliotheken dafür, aber in Deno kann es.

Dies liegt an der Tatsache, dass Deno Zugriff auf Window hat, wie aus der Dokumentation hervorgeht .

Der folgende Code kann sowohl im Browser als auch in Deno ausgeführt werden:

fetch('https://jsonplaceholder.typicode.com/todos/1')
	.then(response => response.json)
	.then(data => console.log(data))

TypeScript-Unterstützung sofort verfügbar


Die Verwendung von TypeScript ist natürlich Geschmackssache. Manche mögen es, andere nicht. Wie auch immer, Deno unterstützt sofort TypeScript und natürlich auch JavaScript.

Sie können dies überprüfen, indem Sie Code schreiben, die Datei als .ts oder .js speichern und mit ausführen deno run. Meiner Meinung nach ist dies kein wesentlicher Vorteil, da die TypeScript-Unterstützung problemlos zu Node.js hinzugefügt werden kann.

Vielen Dank für Ihre Aufmerksamkeit.

All Articles