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

Po dwóch latach rozwoju przedstawione pierwsze duże wydanie Deno 1.0 , , , , , , , , , , , , , ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, platforma do samodzielnego wykonywania aplikacji w JavaScript i TypeScript, której można używać do tworzenia procedur obsługi działających na serwerze. Platforma została opracowana przez Ryana Dahla (Ryana Dahla), twórca Node.js. Podobnie jak Node.js, Deno korzysta z silnika JavaScript V8, który jest również używany w przeglądarkach opartych na Chromium. Jednocześnie Deno nie jest forkiem Node.js, ale nowym projektem stworzonym od podstaw. Kod projektu dystrybuowane przez na licencji MIT. Zespoły przygotowany dla systemu Linux, Windows i macOS.

Znaczący numer wersji jest związany ze stabilizacją API w przestrzeni nazw Deno, które odpowiadają za interakcję aplikacji z systemem operacyjnym. Interfejsy oprogramowania, które do tej pory posiadały nie ustabilizowany, są domyślnie ukryte i dostępne tylko po uruchomieniu w trybie „--unstable”. W miarę tworzenia nowych wersji takie interfejsy API będą stopniowo stawały się stabilne. Interfejs API w globalnej przestrzeni nazw, który zawiera typowe funkcje, takie jak setTimeout() i fetch(), jest jak najbardziej zbliżony do API konwencjonalnych przeglądarek internetowych i został opracowany zgodnie ze standardami sieciowymi dla przeglądarek. Interfejsy API dostarczane przez Rust, które są używane bezpośrednio w kodzie platformy, a także interfejs do tworzenia wtyczek dla środowiska uruchomieniowego Deno, nie zostały jeszcze ustabilizowane i nadal się rozwijają.

Kluczowymi motywami stworzenia nowej platformy JavaScript była chęć wyeliminowania błędów koncepcyjnych, przyznał w architekturze Node.js i zapewniają użytkownikom bezpieczniejsze środowisko. Aby poprawić bezpieczeństwo, silnik V8 napisano w języku Rust, który pozwala uniknąć wielu luk wynikających z manipulacji pamięcią na niskim poziomie, takich jak dostęp po zwolnieniu, wyłuskiwanie wskaźników zerowych i przepełnienie bufora. Platforma służy do przetwarzania żądań w trybie nieblokującym Tokio, również napisany w języku Rust. Tokio umożliwia tworzenie wysokowydajnych aplikacji opartych na architekturze sterowanej zdarzeniami, obsługujących wielowątkowość i przetwarzających żądania sieciowe w trybie asynchronicznym.

Głównym Cechy Deno:

  • Domyślna konfiguracja zorientowana na bezpieczeństwo. Dostęp do plików, sieć i dostęp do zmiennych środowiskowych są domyślnie wyłączone i muszą zostać jawnie włączone. Aplikacje domyślnie działają w izolowanych środowiskach piaskownicy i nie mogą uzyskać dostępu do możliwości systemu bez udzielenia wyraźnych uprawnień;
  • Wbudowana obsługa TypeScript poza JavaScriptem. Do sprawdzania typów i generowania kodu JavaScript używany jest standardowy kompilator TypeScript, co prowadzi do spadku wydajności w porównaniu z analizowaniem JavaScript w wersji 8. W przyszłości planujemy przygotować własną implementację systemu sprawdzania typów TypeScript, który o rząd wielkości poprawi wydajność przetwarzania TypeScript;
  • Środowisko wykonawcze ma postać pojedynczego, samodzielnego pliku wykonywalnego („deno”). Do uruchomienia aplikacji za pomocą Deno wystarczy pobierz dla jego platformy dostępny jest jeden plik wykonywalny o rozmiarze około 20 MB, który nie ma zewnętrznych zależności i nie wymaga żadnej specjalnej instalacji w systemie. Co więcej, deno nie jest aplikacją monolityczną, ale zbiorem pakietów skrzynek w języku Rust (deno_core, zardzewiały_v8), które można stosować osobno;
  • Podczas uruchamiania programu, jak również podczas ładowania modułów, można skorzystać z adresowania URL. Na przykład, aby uruchomić program Welcome.js, możesz użyć polecenia „deno https://deno.land/std/examples/welcome.js”. Kod z zasobów zewnętrznych jest pobierany i buforowany w systemie lokalnym, ale nigdy nie jest automatycznie aktualizowany (aktualizacja wymaga jawnego uruchomienia aplikacji z flagą „--reload”);
  • Efektywne przetwarzanie żądań sieciowych poprzez HTTP w aplikacjach, platforma przeznaczona jest do tworzenia wysokowydajnych aplikacji sieciowych;
  • Możliwość tworzenia uniwersalnych aplikacji internetowych, które można uruchomić zarówno w Deno, jak i w zwykłej przeglądarce internetowej;
  • dostępność standardowy zestaw modułów, którego użycie nie wymaga powiązania z zależnościami zewnętrznymi. Moduły z kolekcji standardowej przeszły dodatkowy audyt i testy kompatybilności;
  • Oprócz środowiska wykonawczego platforma Deno pełni również funkcję menedżera pakietów i umożliwia dostęp do modułów poprzez adres URL znajdujący się w kodzie. Na przykład, aby załadować moduł, możesz określić w kodzie „import * jako dziennik z „https://deno.land/std/log/mod.ts”. Pliki pobrane z serwerów zewnętrznych za pośrednictwem adresu URL są buforowane. Powiązanie z wersjami modułów jest określane poprzez podanie numerów wersji w adresie URL, na przykład „https://unpkg.com/[email chroniony]/dist/liltest.js";
  • Struktura zawiera zintegrowany system kontroli zależności (polecenie „deno info”) oraz narzędzie do formatowania kodu (deno fmt);
  • Wszystkie skrypty aplikacji można połączyć w jeden plik JavaScript.

Różnice w stosunku do Node.js:

  • Deno nie używa menedżera pakietów npm
    i nie jest powiązany z repozytoriami, moduły są adresowane poprzez adres URL lub ścieżkę pliku, a same moduły można umieścić na dowolnej stronie internetowej;
  • Deno nie używa pliku „package.json” do definiowania modułów;
  • Różnica API, wszystkie akcje asynchroniczne w Deno zwracają obietnicę;
  • Deno wymaga wyraźnego zdefiniowania wszystkich niezbędnych uprawnień do plików, zmiennych sieciowych i środowiskowych;
  • Wszystkie błędy, które nie są dostarczane z modułami obsługi, prowadzą do zakończenia działania aplikacji;
  • Deno korzysta z systemu modułów ECMAScript i nie obsługuje funkcji require();
  • Wbudowany serwer HTTP Deno jest napisany w TypeScript i działa na natywnych gniazdach TCP, podczas gdy serwer HTTP Node.js jest napisany w C i zapewnia powiązania dla JavaScript. Twórcy Deno skupili się na optymalizacji całej warstwy gniazd TCP i zapewnieniu bardziej ogólnego interfejsu. Deno HTTP Server zapewnia niższą przepustowość, ale gwarantuje przewidywalne małe opóźnienia. Przykładowo w teście prosta aplikacja oparta na serwerze HTTP Deno była w stanie przetworzyć 25 tysięcy żądań na sekundę z maksymalnym opóźnieniem wynoszącym 1.3 milisekundy. W Node.js podobna aplikacja przetworzył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 jest rozwijane osobno międzywarstwa w celu zapewnienia kompatybilności ze standardową biblioteką Node.js, w miarę jej rozwoju, coraz więcej aplikacji napisanych dla Node.js będzie mogło działać w Deno.
  • Źródło: opennet.ru

Dodaj komentarz