Deno 2.9, platforma zaprojektowana do samodzielnego wykonywania aplikacji serwerowych i desktopowych napisanych w JavaScript i TypeScript z wykorzystaniem silnika V8, używanego w przeglądarkach opartych na Chromium, została wydana. Projekt jest rozwijany przez Ryana Dahla, twórcę Node.js, w celu zapewnienia bezpieczniejszego środowiska i wyeliminowania błędów koncepcyjnych w architekturze Node.js. Aby zwiększyć bezpieczeństwo, framework V8 został napisany w języku Rust, a platforma Tokio służy do nieblokującego przetwarzania żądań. Kod projektu jest rozpowszechniany na licencji MIT. Kompilacje są przygotowywane dla Linux, Windows и macOS.
Nowa wersja wyróżnia się implementacją eksperymentalnego zestawu narzędzi Deno Desktop, który umożliwia tworzenie niestandardowych aplikacji GUI z wykorzystaniem technologii webowych, podobnych do platformy Electron. Logika aplikacji i interfejs są definiowane w JavaScript lub TypeScript z wykorzystaniem standardowych frameworków webowych, a aplikacja jest uruchamiana za pomocą silnika opartego na przeglądarce. Aplikacja jest dostarczana jako samodzielny plik wykonywalny i oferuje interfejs użytkownika podobny do klasycznego oprogramowania GUI.
Deno Desktop oferuje backendy do działania na dwóch silnikach przeglądarki: WebView systemu operacyjnego oraz CEF (Chromium Embedded Framework) zintegrowanym z aplikacją. Backend oparty na WebView pozwala na zmniejszenie rozmiaru plików wykonywalnych dzięki działaniu na silniku przeglądarki WebView2 systemu. Windows i WebKit w macOS и Linuxa zaplecze CEF umożliwia uzyskanie tego samego renderowania interfejsu na różnych platformach Linux, macOS и Windows, ale kosztem znacznego zwiększenia rozmiaru plików wykonywalnych.
Rozmiar pliku wykonywalnego aplikacji testowej szacuje się na 40 MB w przypadku WebView i 150 MB w przypadku CEF. Dla porównania, Electron ma 100 MB, Electrobun 61 MB, a Tauri 2–10 MB (Electron korzysta z wbudowanego CEF, a Electrobun i Tauri z systemowego WebView). Trwają prace nad mechanizmem współdzielenia wspólnego silnika CEF między aplikacjami, co zmniejszy rozmiar plików wykonywalnych.
Deno Desktop jest w pełni kompatybilny z Node.js, ekosystemem NPM oraz frameworkami internetowymi, takimi jak Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start i Vite SSR. API umożliwia dostęp do natywnych interfejsów API dla pulpitu. Można na przykład kontrolować rozmiar, położenie i widoczność okien, tworzyć menu, dołączać niestandardowe moduły obsługi, ustawiać ikony dla zasobnika systemowego i paneli oraz wyświetlać natywne okna dialogowe systemu operacyjnego. Aplikacje internetowe można tworzyć jako programy desktopowe bez konieczności zmiany ich kodu, a używane frameworki internetowe można automatycznie wykrywać i kompilować krzyżowo w jednym systemie. Linux x64/arm64, Windows x64 i macOS x64/arm64. Dla Linux Pakiety można generować w formatach AppImage, deb i rpm.
W przeciwieństwie do Electrona, Electrobuna i Tauri, Deno Desktop nie korzysta z wieloprocesowego modelu wykonywania z wykorzystaniem IPC opartego na gniazdach. Zamiast tego wykorzystuje model wielowątkowy dla CEF lub model oparty na grupach procesów dla WebView, z komunikacją między backendem a kodem GUI za pośrednictwem kanałów wewnątrzprocesowych. Posiada wbudowany mechanizm sprawdzania aktualizacji i automatycznej instalacji, który w celu oszczędzania przepustowości pobiera tylko dane zmienione od poprzedniej wersji (za pomocą poprawek binarnych opartych na bsdiff) i obsługuje przywracanie do poprzedniej wersji w przypadku awarii podczas uruchamiania nowej wersji.
Inne nowe funkcje w Deno 2.9 obejmują:
- Obsługa bezpośredniego odczytu plików blokad w poleceniu „deno install” w celu uproszczenia migracji z npm, pnpm, yarn i Bun do Deno.
- Wsparcie dla importowania modułów CSS.
- Wdrożenie zgodności z platformą Node.js 26.
- Nowe polecenia: „deno link”, „deno unlink” i „deno list”.
- Obsługa interfejsu API Web Locks umożliwiającego ustawianie blokad zasobów.
- Włącz domyślne 24-godzinne opóźnienie (min-release-age=24h) przed zainstalowaniem nowych wersji zależności, aby zapewnić ochronę przed atakami polegającymi na naruszeniu zależności.
- Skrócony czas uruchamiania (~2x), zmniejszone zużycie pamięci (~2.2x) i zwiększona przepustowość podczas pracy z protokołem HTTP (~1.2x).

Źródło: opennet.ru

