Naucz się Deno i wyjdź poza Node.js
Opublikowany: 2023-04-20Chociaż Node.js pozostaje z ogromnym marginesem najczęściej używanym środowiskiem wykonawczym JavaScript po stronie serwera, alternatywne środowiska wykonawcze, takie jak Deno i Bun, przyciągnęły uwagę, próbując ulepszyć koncepcję Node.js.
Deno, bardziej popularne z dwóch nowszych środowisk wykonawczych, rozwiązuje niektóre problemy związane z bezpieczeństwem Node.js i zapewnia bardziej wszechstronną obsługę technologii, takich jak TypeScript i WebAssembly.
W tym artykule zapoznasz się z podstawami Deno, dowiesz się, jak wypada w porównaniu z Node.js i Bun, a także wykonasz praktyczną demonstrację, która wykorzystuje Deno do zbudowania prostego serwera WWW HTTP.
Co to jest deno?
Gdy programiści zapoznali się z JavaScriptem, dostrzegli jego potencjał do programowania na lokalnych maszynach. Stworzyli więc środowiska uruchomieniowe po stronie serwera — środowiska, które umożliwiają wykonywanie kodu JavaScript na maszynach bez użycia przeglądarki.
Ryan Dahl opracował w tym celu Node.js, a później stworzył Deno, aby rozwiązać niektóre problemy, które napotkał w oryginalnym projekcie Node.js. Niektóre godne uwagi wady obejmują poleganie na scentralizowanym menedżerze pakietów, takim jak npm, brak standardowej biblioteki i luźne domyślne ustawienia bezpieczeństwa.
Niektóre z głównych zalet Deno obejmują:
- Domyślne zabezpieczenia — użytkownik musi wyraźnie zezwolić kodowi na dostęp do sieci, systemu plików lub środowiska.
- Wbudowana obsługa TypeScript i WebAssembly — Uruchamianie programów TypeScript i WebAssembly w Deno jest tak proste, jak uruchamianie programów JavaScript. Środowisko wykonawcze kompiluje języki tak samo, jak w przypadku JavaScript.
- Scentralizowany menedżer pakietów — Zamiast polegać na repozytorium pakietów , takim jak npm lub menedżer pakietów Bun, Deno może importować kod bezpośrednio z adresów URL. Ta funkcja oznacza, że możesz ładować zależności z dowolnego miejsca, w którym są hostowane, w tym z repozytorium GitHub, serwera lub sieci CDN. Deno oferuje również usługę hostingu skryptów dla jeszcze łatwiejszego dostępu.
- Zgodność ze standardami sieciowymi — Deno dąży do stosowania tych samych interfejsów API, co przeglądarki, co oznacza, że kod napisany dla przeglądarek można łatwo przetłumaczyć na środowisko wykonawcze.
Duże firmy i główni gracze branżowi, tacy jak Slack, Netlify i Supabase, przyjęli Deno, ale jego przyjęcie wśród twórców stron internetowych było mniej rozpowszechnione. Według ankiety Stack Overflow z 2022 r. tylko 1,47% profesjonalnych programistów, którzy odpowiedzieli na ankietę, używało Deno, podczas gdy 46,31% deklarowało używanie Node.js.
Co robi Deno?
Jak każde środowisko wykonawcze JavaScript, Deno umożliwia programistom uruchamianie JavaScript po stronie serwera. W rezultacie możesz używać Deno do wykonywania szerokiej gamy zadań programistycznych.
Deno przoduje najbardziej w zadaniach, takich jak tworzenie aplikacji serwerowych, które odpowiadają na żądania użytkowników w sieci. Na przykład, jeśli tworzysz księgarnię internetową, możesz użyć Deno do zbudowania aplikacji, która pobiera informacje z bazy danych PostgreSQL, tworzy stronę, którą użytkownik chce przeglądać, i wysyła ją do przeglądarki w celu renderowania.
Możesz także użyć Deno do zadań programistycznych niższego poziomu, takich jak budowanie narzędzia wiersza poleceń do zarządzania zadaniami do wykonania za pośrednictwem terminala. Innymi słowy, możesz użyć Deno do osiągnięcia tych samych celów, co przy użyciu języków takich jak Python czy Ruby.
Deno kontra Node
Deno ma być ulepszeniem w stosunku do Node.js i spełnia tę obietnicę w kilku kluczowych obszarach. Deno poprawia bezpieczeństwo, umożliwiając bardziej szczegółowe konfiguracje dostępu dla różnych modułów kodu. Koncentruje się również na zgodności API ze standardami internetowymi, co umożliwia programistom używanie tego samego kodu zarówno po stronie przeglądarki, jak i serwera.
Dla zespołów pracujących nad projektami JavaScript po stronie serwera Deno stał się realną alternatywą dla Node. I chociaż ich podobna funkcjonalność przekonała niektórych programistów, że Deno może zastąpić Node.js, taka możliwość jest mało prawdopodobna z kilku kluczowych powodów.
Node.js jest najpopularniejszym środowiskiem wykonawczym JavaScript i zgromadził ogromny ekosystem gotowych pakietów oraz dużą, aktywną społeczność użytkowników. Te bezcenne zasoby pomagają Node.js pozostać niezwykle atrakcyjnym środowiskiem wykonawczym.
Natomiast Deno jest nowe: wersja 1.0 została wydana w maju 2020 r., więc stosunkowo niewielu programistów miało czas się z nią bawić. Nauka nowego narzędzia wydłuża czas rozwoju. Ponadto nie jest jasne, czy Deno przyniosłoby znaczące korzyści wielu prostym projektom.
Ale jeśli tworzysz aplikację w obszarze, w którym bezpieczeństwo jest niezbędne, takim jak finanse, możliwości bezpieczeństwa Deno mogą sprawić, że zmiana będzie opłacalna.
Deno kontra Bun
Były inżynier Stripe, Jarred Sumner, po raz pierwszy wypuścił Bun w lipcu 2022 roku do testów beta. Bun jest bardziej eksperymentalnym środowiskiem wykonawczym niż Deno i, w przeciwieństwie do Deno, został zaprojektowany z myślą o szerokiej kompatybilności wstecznej z Node.js.
Bun oferuje również niesamowicie szybką wydajność, przewyższając Node.js i Deno. Kluczowe funkcje umożliwiają te możliwości:
- Lepszy silnik — zamiast silnika Google V8 JavaScript i Web Assembly, Bun używa szybszego i wydajniejszego JavaScriptCore jako podstawowego silnika JavaScript.
- Większa kontrola nad kodem — Bun jest napisany w Zig, języku niskiego poziomu, który zapewnia większą kontrolę nad wykonywaniem kodu niż JavaScript.
- Precyzyjnie dostrojona wydajność — zespół pracujący nad Bunem nadał priorytet profilowaniu, testom porównawczym i optymalizacji podczas programowania, aby zapewnić wydajność kodu.
Bun jest tak nowy, że wsparcie społeczności jest stosunkowo niewielkie, aby pomóc w rozwiązywaniu problemów. Niemniej jednak Bun może być świetną zabawą do eksperymentowania. Zespoły, które szczególnie wymagają zwiększenia wydajności, mogą uznać Bun za przydatne w swoich projektach, ale tworzenie stron internetowych często traktuje priorytetowo czynniki inne niż wydajność.
Pierwsze kroki z Deno
Teraz, gdy dowiedziałeś się trochę o Deno io porównaniu z innymi popularnymi środowiskami wykonawczymi JavaScript, nadszedł czas, aby zobaczyć, jak to działa. W tej sekcji dowiesz się, jak utworzyć prosty serwer w Deno, który odpowiada na żądania HTTP komunikatem „Witaj z serwera!”
Instalacja Deno
Możesz zainstalować Deno na komputerze jako binarny plik wykonywalny, korzystając z instrukcji instalacji z oficjalnej dokumentacji. Na przykład w systemie macOS możesz zainstalować Deno za pomocą polecenia brew install deno
.
Innym sposobem na rozpoczęcie pracy z Deno jest zainstalowanie go jako pakietu npm, takiego jak ten:
Utwórz folder dla swojego projektu (być może deno_example ) i uruchom w nim polecenie npm init
. (Możesz zaakceptować wszystkie domyślne opcje sugerowane przez init
podczas tworzenia podstawowego pliku package.json ).
Po zainicjowaniu aplikacji uruchom npm install deno-bin
aby zainstalować pakiet binarny Deno. Teraz możesz zaktualizować plik package.json , aby umożliwić uruchamianie aplikacji za pomocą npm start
. Dodaj pogrubioną linię poniżej do właściwości obiektu „scripts” w domyślnym pliku package.json:
"scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },
Ten dodatek do skryptu umożliwia Deno uruchomienie modułu app.ts z uprawnieniami sieciowymi ( --allow-net
). Pamiętaj, że podczas pracy z Deno musisz jawnie zezwolić na dostęp do sieci lub systemu plików.
Teraz możesz przystąpić do tworzenia modułu app.ts odpowiedzialnego za nasłuchiwanie na porcie i obsługę żądań użytkowników.
Tworzenie modułu App.ts
Stworzenie podstawowego serwera w Deno jest niezwykle proste. Najpierw utwórz plik app.ts i wklej następujący kod:
import { serve } from "https://deno.land/[email protected]/http/server.ts"; serve((_req) => new Response("Hello from the server!"), { port: 8000 });
Kod wykorzystuje funkcję serve
z server.ts Deno library
przechowywanej na oficjalnej stronie internetowej Deno.land. Ten kod zapewnia również obsługę funkcji serve
dla żądań przychodzących. Funkcja obsługi odpowiada na każde żądanie komunikatem „Witaj z serwera!”
Funkcja serve
przyjmuje również opcjonalne parametry, takie jak numer portu, na którym chcesz obsługiwać. Tutaj przykładowy kod używa tych parametrów do obsługi na porcie 8000.
Następnie uruchom serwer, uruchamiając npm start
. To powinno uruchomić serwer, który nasłuchuje na localhost:8000
i odpowiada na żądania powitaniem.
Jeśli chcesz rozszerzyć serwer do pełnego interfejsu API, prawdopodobnie będziesz musiał dodać łączność z bazą danych. Jest to łatwe, ponieważ społeczność Deno stworzyła sterowniki obsługujące popularne bazy danych, takie jak MariaDB/MySQL, PostgreSQL, MongoDB i inne.
Streszczenie
Czasy działania wahają się od zwykłych i niezawodnych do bardzo eksperymentalnych. Wybór odpowiedniego dla twojego projektu zależy od twojego projektu i tego, jak chcesz, aby twoje środowisko wykonawcze pomogło ci osiągnąć twoje cele.
Node.js działa dobrze w przypadku większości projektów. Ma duży ekosystem i dużą społeczność, która może pomóc w szerokiej gamie scenariuszy rozwiązywania problemów.
Zaletą Deno jest dodatkowe bezpieczeństwo i lepsze wrażenia programistyczne. Jednocześnie najlepiej nadaje się dla doświadczonych zespołów, ponieważ jego korzyści przewyższają czas i koszty pracy związane z nauką nieznanego środowiska uruchomieniowego.
Wreszcie, chociaż Bun jest zbyt eksperymentalny dla większości profesjonalnych projektów, jest wyjątkowym i zabawnym środowiskiem wykonawczym, które można wybrać do osobistego projektu lub rozszerzyć.
Podsumowując, Deno oferuje równowagę między zaletami Node.js a eksperymentalnymi możliwościami Bun. Podczas gdy Node.js jest użytecznym wyborem dla większości projektów, Deno może być w czołówce tego, jak będzie ewoluować tworzenie stron internetowych w przyszłości.
Tymczasem ćwicz swoje kotlety Deno, rejestrując się na poziomie Hobby Hosting aplikacji Kinsta — kodowanie teraz i skalowanie później.