Die Ausgabe der Deno-Plattform 2.9 wurde veröffentlicht, die für die isolierte Ausführung von Server- und Desktopanwendungen in den Programmiersprachen JavaScript und TypeScript unter Verwendung der V8-Engine, die in Chromium-basierten Browsern eingesetzt wird, vorgesehen ist. Das Projekt wird von Ryan Dahl, dem Schöpfer von Node.js, entwickelt, um eine sicherere Umgebung zu bieten und konzeptionelle Fehler in der Architektur von Node.js zu beseitigen. Um die Sicherheit zu erhöhen, wurde die Umschließung um die V8-Engine in der Programmiersprache Rust geschrieben, und für nicht-blockierende Anfragen wird die Tokio-Plattform verwendet. Der Code des Projekts wird unter der MIT-Lizenz veröffentlicht. Die Builds sind für Linux, Windows und macOS vorbereitet.
Die neue Version zeichnet sich durch die Implementierung des experimentellen Werkzeugs Deno Desktop aus, das es ermöglicht, benutzerdefinierte Anwendungen mit grafischer Benutzeroberfläche zu erstellen, die mit Web-Technologien in Anlehnung an die Electron-Plattform entwickelt wurden. Die Logik und das Interface der Anwendung werden in JavaScript oder TypeScript unter Verwendung gängiger Web-Frameworks definiert, während die Ausführung mit der Browser-Engine organisiert wird. Die Anwendung wird in Form einer eigenständigen ausführbaren Datei geliefert und unterscheidet sich im Umgang mit dem Benutzer nicht von klassischen Programmen mit grafischer Benutzeroberfläche.
Deno Desktop bietet Backends zur Nutzung von zwei Browser-Engines – der von dem Betriebssystem bereitgestellten WebView und der in die Anwendung integrierten CEF (Chromium Embedded Framework). Das Backend auf Basis von WebView ermöglicht eine Reduzierung der Dateigröße von ausführbaren Dateien, da es auf der systemeigenen Browser-Engine WebView2 in Windows und WebKit in macOS und Linux basiert, während das CEF-Backend die Möglichkeit bietet, eine einheitliche Darstellung der Benutzeroberfläche auf den Plattformen Linux, macOS und Windows zu erreichen, allerdings zu Lasten einer erheblichen Vergrößerung der Dateigröße von ausführbaren Dateien.
Die Größe der ausführbaren Datei der Testanwendung unter Verwendung von WebView wird auf 40 MB geschätzt, während sie bei Verwendung von CEF 150 MB beträgt. Zum Vergleich liegt dieser Wert für Electron bei 100 MB, für Electrobun bei 61 MB und für Tauri zwischen 2-10 MB (in Electron wird ein in die Anwendung eingebettetes CEF verwendet, während in Electrobun und Tauri das systemeigene WebView genutzt wird). Ein Mechanismus zur gemeinsamen Nutzung der gemeinsamen CEF-Engine in verschiedenen Anwendungen befindet sich in der Entwicklung, der es ermöglichen wird, die Größe der ausführbaren Dateien zu reduzieren.
In Deno Desktop besteht vollständige Kompatibilität mit Node.js, dem NPM-Ökosystem und Web-Frameworks wie Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start und Vite SSR. Es wird eine API bereitgestellt, um auf native Desktop-APIs zuzugreifen, wie z. B. die Steuerung von Größe, Position und Sichtbarkeit des Fensters aus dem Programm heraus, das Erstellen von Menüs, das Anheften eigener Handler, das Festlegen von Symbole für das Systemtray und die Panels sowie das Anzeigen nativer Dialoge für das OS. Webanwendungen können in Form von Desktop-Anwendungen ohne Änderung ihres Codes gebündelt werden, und es gibt eine automatische Erkennung der verwendeten Web-Frameworks und die Cross-Kompilierung auf einem System für Linux x64/arm64, Windows x64 und macOS x64/arm64. Für Linux können Pakete in den Formaten AppImage, deb und rpm generiert werden.
Im Gegensatz zu Electron, Electrobun und Tauri verwendet Deno Desktop kein Multithreading-Modell mit IPC auf der Basis von Sockets, sondern ein Multithreading-Modell für CEF oder ein Modell auf der Basis von Prozessgruppen für WebView, wobei die Interaktion zwischen dem Backend und dem Benutzeroberflächen-Code über Kanäle innerhalb eines Prozesses erfolgt. Es gibt einen integrierten Mechanismus zur Überprüfung und automatischen Installation von Updates, der zur Einsparung von Bandbreite nur die sich im Vergleich zur vorherigen Version geänderten Daten herunterlädt (binäre Patches basierend auf bsdiff werden verwendet) und einen Rollback auf die vorherige Version im Falle eines Fehlers beim Start der neuen Version unterstützt.
Unter anderem neue Funktionen in Deno 2.9:
- Unterstützung des direkten Lesens von Lock-Dateien im Befehl „deno install“ zur Vereinfachung der Migration auf Deno von npm, pnpm, yarn und Bun.
- Unterstützung für den Import von CSS-Modulen.
- Implementierung der Kompatibilität mit der Node.js-Plattform 26.
- Neue Befehle „deno link“, „deno unlink“ und „deno list“.
- Unterstützung der API Web Locks zum Setzen von Sperren auf Ressourcen.
- Standardmäßig eine 24-stündige Verzögerung (min-release-age=24h) vor dem Installieren neuer Versionen von Abhängigkeiten zum Schutz vor Angriffen durch Kompromittierung von Abhängigkeiten.
- Verringerung der Startzeit (~2x), Reduzierung des Speicherverbrauchs (~2.2x) und Erhöhung der Durchsatzleistung bei der Arbeit mit HTTP (~1.2x).

Quelle: opennet.ru

