Deno 2.9, en platform designet til standalone-udførelse af server-side og desktop-applikationer skrevet i JavaScript og TypeScript ved hjælp af V8-motoren, der bruges i Chromium-baserede browsere, er blevet udgivet. Projektet udvikles af Ryan Dahl, skaberen af Node.js, med det mål at skabe et mere sikkert miljø og eliminere konceptuelle fejl i Node.js-arkitekturen. For at forbedre sikkerheden er V8-frameworket skrevet i Rust, og Tokio-platformen bruges til ikke-blokerende anmodningsbehandling. Projektkoden distribueres under MIT-licensen. Builds er forberedt til Linux, Windows и macOS.
Den nye version er kendt for sin implementering af det eksperimentelle Deno Desktop-værktøjssæt, som muliggør oprettelse af brugerdefinerede GUI-applikationer bygget ved hjælp af webteknologier, svarende til Electron-platformen. Applikationens logik og grænseflade er defineret i JavaScript eller TypeScript ved hjælp af standard webframeworks, og applikationen udføres ved hjælp af en browserbaseret motor. Applikationen leveres som en selvstændig eksekverbar fil og tilbyder en brugergrænseflade, der ligner klassiske GUI-programmer.
Deno Desktop tilbyder backends til kørsel på to browsermotorer: operativsystemets WebView og CEF (Chromium Embedded Framework) integreret i applikationen. Den WebView-baserede backend muliggør mindre eksekverbare filstørrelser ved at køre oven på systemets WebView2 browsermotor. Windows og WebKit i macOS и Linux, og CEF-backend gør det muligt at opnå den samme grænsefladegengivelse på tværs af platforme Linux, macOS и Windows, men på bekostning af en betydelig forøgelse af størrelsen af eksekverbare filer.
Størrelsen på den eksekverbare fil i testapplikationen er estimeret til 40 MB ved brug af WebView og 150 MB ved brug af CEF. Til sammenligning er dette tal 100 MB for Electron, 61 MB for Electrobun og 2-10 MB for Tauri (Electron bruger indlejret CEF, mens Electrobun og Tauri bruger systemet WebView). En mekanisme til at dele en fælles CEF-motor på tværs af applikationer er under udvikling, hvilket vil reducere størrelsen på de eksekverbare filer.
Deno Desktop er fuldt kompatibel med Node.js, NPM-økosystemet og webframeworks som Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start og Vite SSR. Der findes en API til adgang til native desktop-API'er. For eksempel kan du kontrollere størrelsen, placeringen og synligheden af vinduer, oprette menuer, tilføje brugerdefinerede handlere, indstille ikoner til proceslinjen og panelerne og vise native OS-dialoger. Webapplikationer kan bygges som desktopprogrammer uden at ændre deres kode, og de anvendte webframeworks kan automatisk detekteres og krydskompileres på et enkelt system. Linux x64/arm64, Windows x64 og macOS x64/arm64. Til Linux Pakker kan genereres i AppImage-, deb- og rpm-formater.
I modsætning til Electron, Electrobun og Tauri bruger Deno Desktop ikke en multiproces-eksekveringsmodel med socket-baseret IPC. I stedet bruger den en multi-threaded model til CEF eller en procesgruppebaseret model til WebView, med kommunikation mellem backend og GUI-kode via intra-proces-kanaler. Den har en indbygget opdateringskontrol og automatisk installationsmekanisme, der for at spare båndbredde kun downloader data, der er ændret siden den forrige version (ved hjælp af bsdiff-baserede binære patches) og understøtter rollback til den forrige version i tilfælde af en fejl ved lancering af en ny version.
Andre nye funktioner i Deno 2.9 inkluderer:
- Understøttelse af direkte læsning af låsefiler i kommandoen "deno install" for at forenkle migrering til Deno fra npm, pnpm, yarn og Bun.
- Understøttelse af import af CSS-moduler.
- Implementering af kompatibilitet med Node.js 26-platformen.
- Nye kommandoer "deno link", "deno unlink" og "deno list".
- Understøttelse af Web Locks API til indstilling af låse på ressourcer.
- Aktivér en standardforsinkelse på 24 timer (min-release-age=24h) før installation af nye versioner af afhængigheder for at beskytte mod angreb på afhængighedskompromittering.
- Reduceret opstartstid (~2x), reduceret hukommelsesforbrug (~2.2x) og øget gennemløbshastighed ved arbejde med HTTP (~1.2x).

Kilde: opennet.ru

