Autor Node.js przedstawił zabezpieczoną platformę JavaScript Deno 1.0.

Po dwóch latach prac rozwojowych zaprezentowano pierwsze znaczące wydanie Deno 1.0, platforma do zdalnego uruchamiania aplikacji napisanych w językach JavaScript i TypeScript, która może być używana do tworzenia serwerowych obsługiwaczy. Platformę rozwija Ryan Dahl (Ryan Dahl), twórca Node.js. Podobnie jak w Node.js, w Deno używany jest silnik JavaScript, V8, który również jest stosowany w przeglądarkach opartych na Chromium. Deno nie jest jednak odgałęzieniem Node.js, lecz nowym projektem stworzonym od podstaw. Kod projektu rozpowszechniany jest licencjonowany na podstawie MIT. Wersje przygotowano są dostępne dla systemów Linux, Windows i macOS.

Znaczący numer wersji wiąże się z stabilizacją API w przestrzeni nazw Deno, które odpowiadają za interakcję aplikacji z systemem operacyjnym. Interfejsy, które na razie nie są stabilne, domyślnie są ukryte i dostępne tylko w trybie „—unstable”. W miarę wydawania nowych wersji takie API będą stopniowo przekształcane w stabilne. API w globalnej przestrzeni nazw, obejmujące podstawowe funkcje takie jak setTimeout() oraz fetch(), jest dostosowane do API standardowych przeglądarek internetowych i rozwija się zgodnie z Web-Standardami dla przeglądarek. API udostępniane przez Rust, które jest bezpośrednio stosowane w kodzie platformy oraz interfejs do opracowywania wtyczek do Deno runtime, na razie nie są stabilne i wciąż są w fazie rozwoju.

Kluczowymi motywami stworzenia nowej platformy JavaScript było pragnienie wyeliminowania koncepcyjnych błędów, popełnionych w architekturze Node.js oraz zapewnienie użytkownikom bardziej bezpiecznego środowiska. Aby zwiększyć bezpieczeństwo, obudowa wokół silnika V8 została napisana w języku Rust, co pozwala uniknąć wielu luk bezpieczeństwa wynikających z niskopoziomowego zarządzania pamięcią, takich jak dostęp do obszaru pamięci po jej zwolnieniu, dereferencjonowanie wskaźników zerowych oraz przekroczenie granic bufora. Do obsługi żądań w trybie nieblokującym wykorzystywana jest platforma Tokio, również napisana w języku Rust. Tokio umożliwia tworzenie aplikacji o wysokiej wydajności opartych na architekturze zdarzeniowej (Event-driven), obsługujących wielowątkowość i przetwarzanie żądań sieciowych w trybie asynchronicznym.

Podstawowe cechy Deno:

  • Skoncentrowanie na bezpieczeństwie w konfiguracji domyślnej. Dostęp do plików, możliwości sieciowe i dostęp do zmiennych środowiskowych są domyślnie zablokowane i wymagają jawnego włączenia. Aplikacje domyślnie uruchamiane są w izolowanych środowiskach sandbox i nie mogą uzyskać dostępu do możliwości systemowych bez przyznania jawnych uprawnień;
  • Wbudowane wsparcie dla języka TypeScript oprócz JavaScript. Do sprawdzania typów i generowania JavaScript używany jest wewnętrzny kompilator TypeScript, co prowadzi do spadku wydajności w porównaniu do analizy JavaScript w V8. W przyszłości planowane jest opracowanie własnej implementacji systemu sprawdzania typów TypeScript, co pozwoli znacznie zwiększyć wydajność przetwarzania TypeScript.
  • Środowisko uruchomieniowe dostarczane jest w postaci jednego samowystarczalnego pliku wykonawczego („deno”). Aby uruchomić aplikacje za pomocą Deno, wystarczy pobrać dla swojej platformy jeden plik wykonywalny o rozmiarze około 20 MB, nie mający zewnętrznych zależności i nie wymagający specjalnej instalacji w systemie. Przy tym Deno nie jest monolityczną aplikacją, a stanowi zbiór pakietów crate w Rust (deno_core, rusty_v8), które mogą być używane oddzielnie;
  • Podczas uruchamiania programu, a także do ładowania modułów można użyć adresacji przez URL. Na przykład, aby uruchomić program welcome.js, można użyć polecenia „deno https://deno.land/std/examples/welcome.js”. Kod z zewnętrznych źródeł jest pobierany i buforowany na lokalnym systemie, ale nigdy nie jest automatycznie aktualizowany (aby go zaktualizować, należy wyraźnie uruchomić aplikację z flagą „—reload”);
  • Skuteczna obsługa żądań sieciowych HTTP w aplikacjach, platforma jest zaprojektowana do tworzenia wysokowydajnych aplikacji sieciowych;
  • Możliwość tworzenia uniwersalnych aplikacji webowych, które mogą działać zarówno w Deno, jak i w zwykłej przeglądarce internetowej;
  • Obecność standardowego zestawu modułów, których użycie nie wymaga powiązania z zewnętrznymi zależnościami. Moduły ze standardowej kolekcji przeszły dodatkowy audyt i weryfikację zgodności;
  • Oprócz runtime, platforma Deno pełni także rolę menedżera pakietów i umożliwia odwoływanie się do modułów za pomocą URL w kodzie. Na przykład, aby załadować moduł, można w kodzie wskazać «import * as log from «https://deno.land/std/log/mod.ts». Pliki pobrane z zewnętrznych serwerów za pomocą URL są buforowane. Powiązanie z wersjami modułów określane jest przez numery wersji w URL, na przykład «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
  • W skład integracji wchodzi system inspekcji zależności (komenda „deno info”) oraz narzędzie do formatowania kodu (deno fmt);
  • Wszystkie skrypty aplikacji mogą zostać połączone w jeden plik JavaScript.

Różnice w stosunku do Node.js:

  • Deno nie korzysta z menedżera pakietów npm
    i nie jest powiązany z repozytoriami, adresowanie modułów odbywa się za pomocą URL lub ścieżki plików, a same moduły mogą być umieszczone na dowolnej stronie;
  • W Deno nie używa się «package.json» do definiowania modułów;
  • Różnice w API, wszystkie asynchroniczne operacje w Deno zwracają obietnicę;
  • Deno wymaga jawnego określenia wszystkich potrzebnych uprawnień dla plików, sieci i zmiennych środowiskowych;
  • Wszystkie błędy, które nie mają obsługi, prowadzą do zakończenia działania aplikacji;
  • W Deno stosuje się system modułów ECMAScript i nie wspiera require();
  • Wbudowany serwer HTTP Deno napisany jest w TypeScript i działa na natywnych gniazdach TCP, podczas gdy serwer HTTP Node.js napisany jest w C i oferuje powiązania dla JavaScript. Programiści Deno skoncentrowali wysiłki na optymalizacji całego poziomu gniazd TCP oraz dostarczeniu bardziej ogólnego interfejsu. Serwer HTTP Deno zapewnia mniejszą przepustowość, ale gwarantuje przewidywalnie niskie opóźnienia. Na przykład w teście prosta aplikacja oparta na serwerze HTTP Deno mogła obsłużyć 25 tysięcy żądań na sekundę z maksymalnym opóźnieniem wynoszącym 1,3 milisekundy. W Node.js podobna aplikacja obsłużyła 34 tysiące żądań na sekundę, ale opóźnienia wahały się od 2 do 300 milisekund.
  • Deno nie jest kompatybilne z pakietami dla Node.js (NPM), ale rozwija się oddzielnie warstwa dla zgodności ze standardową biblioteką Node.js, w miarę jej rozwoju w Deno będzie mogło działać coraz więcej aplikacji napisanych dla Node.js.
  • Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster