Node.js może mieć ugruntowaną pozycję, ale nie przeocz Deno, podobnego frameworka od tego samego programisty.
Node.js to długo działająca platforma, która umożliwia pisanie kodu po stronie serwera w JavaScript. Pierwotnie wydany w 2009 roku, framework odnotował znaczny wzrost i eksplozję użycia w ostatnich latach.
Deno różni się stylem formatowania, składnią importu i zarządzaniem pakietami, ale ten sam inżynier zbudował te konkurencyjne frameworki na tym samym silniku.
Dziś Deno istnieje wystarczająco długo, aby zdobyć miejsce w stosach wielu programistów. Jeśli chcesz rozpocząć nowy projekt JavaScript, możesz się zastanawiać, który wybór jest właściwy.
Funkcje Node i Deno
Prawie dziewięć lat po wydaniu Node, jego twórca, Ryan Dahl, ogłosił nowy projekt: Deno. Tam, gdzie Node był kiedyś jedyną opcją JavaScript po stronie serwera, Deno dał nam alternatywę.
Node.js i Deno są dość podobne pod wieloma względami. Większość różnic między nimi występuje pod maską. Tam, gdzie Node działa na silniku JavaScript V8, Deno działa na niestandardowym silniku zbudowanym w Rust z silnym naciskiem na wydajność.
Większość głównych różnic między nimi opiera się na funkcjach obsługiwanych przez każdy język. Moduły, linting, maszynopis i zarządzanie pakietami są obsługiwane zupełnie inaczej.
Importy modułów: CommonJS vs. ES
Node.js domyślnie używa modułów CommonJS ze składnią require(). Węzeł pozwala ci to zmienić, zmieniając pliki konfiguracyjne tak, aby zamiast tego używały modułów ECMAScript ze składnią import(), jeśli sobie tego życzą.
// To jest prawidłowy import modułu CommonJS w Node.js
rozm _ = wymagać("lodasz");
// To jest prawidłowy import modułu ECMAScript w Node.js
import _ z„lodasz”;
Istnieje pewna ograniczona interoperacyjność między dwoma typami ładowania modułów ES, przy czym niektóre moduły ECMAScript mogą być włączane przy użyciu składni require(). Każdy typ importu obsługuje moduły nieco inaczej, ale w większości przypadków każdy z nich będzie działał.
Pozwala to wybrać preferowaną metodologię włączania zewnętrznych modułów podczas tworzenia projektu.
Deno stosuje inne podejście, jeśli chodzi o uwzględnianie zewnętrznych modułów w projekcie. Deno używa składni include() dla wszystkich modułów, jednak w przeciwieństwie do importu Node, moduły importowane w Deno mogą pochodzić z dowolnej lokalizacji. Lokalizacje te mogą nawet obejmować zdalne sieci dostarczania treści (CDN).
// To jest prawidłowa instrukcja importu w Deno
import" https://deno.land/x/[email protected]/dist/lodash.js";
Umożliwia to importowanie zależności z dowolnej lokalizacji, lokalnej lub zdalnej, oferując znacznie większą elastyczność. Jeśli wolisz pracować z tradycyjną składnią require z Node.js, możesz napisać własną funkcję polyfill require w Deno jako obejście.
Wsparcie dla kodu TypeScript
TypeScript odnotowuje rosnący wzrost popularności w ciągu ostatnich kilku lat i nie ma żadnych oznak spowolnienia w najbliższym czasie. Przeniesienie bezpiecznej dla typów dynamiki kodu do JavaScript okazało się niezwykle udanym przedsięwzięciem.
Dzisiaj skonfigurowanie nowego projektu TypeScript lub przekonwertowanie istniejącego projektu Node.js na TypeScript jest proste, choć nieco czasochłonne.
Dodanie obsługi TypeScript stało się na tyle popularne, że większość nowoczesnych frameworków ma teraz jakąś formę obsługi TypeScript. Angular był liderem dzięki wbudowanej obsłudze języka TypeScript. Dziś nawet React ma metody konfigurowania obsługi TypeScript.
Deno został zaprojektowany z dołączoną obsługą języka TypeScript, aby pomóc zwiększyć produktywność. Dzięki gotowej obsłudze języka TypeScript Deno nie posiada nawet minimalnej konfiguracji wymaganej przez Node.js do opracowania wpisanego kodu JavaScript.
Jeśli kochasz TypeScript, możesz szybko i łatwo rozpocząć pracę dzięki wsparciu Deno, ale może się okazać, że brakuje Ci niektórych standardowych bibliotek Node.js. Chociaż Deno oferuje szybszą konfigurację, brak rozwiniętego ekosystemu może utrudniać proces kompilacji.
Linting w celu wygenerowania czystszego kodu
Node.js ma do wyboru szeroką gamę lintersów. Istnieje wiele dobrze opracowanych opcji, które można szybko i łatwo zainstalować i skonfigurować. Jednak podobnie jak w przypadku TypeScript, będziesz musiał wykonać trochę pracy nóg, aby zacząć z wybranym przez nich linterem.
Deno wybrał nieco inną drogę w formatowaniu kodu, dostarczając własne wbudowane rozwiązanie do tworzenia lintingu dla plików .js, .ts i .md. Uruchomienie polecenia „deno fmt” automatycznie sformatuje wszystkie pliki w bieżącym katalogu roboczym.
Jeśli nie jesteś fanem domyślnego lintera, istnieje możliwość zainstalowania i uruchomienia wybranego systemu formatowania, tak jak w przypadku Node. Przełączanie systemów jest proste, ponieważ linter Deno działa za pomocą zewnętrznego polecenia, a nie jako część domyślnego potoku kompilacji.
Jeśli zastanawiasz się nad wymianą lintera Deno na nowy system, powinieneś być świadomy potencjalnych problemów ze zgodnością i mieć je na uwadze. Większość linterów JavaScript będzie wymagać instalacji Node, nawet jeśli nie jest to system, w którym działa formatowany projekt.
Zarządzanie pakietami
Menedżer pakietów Node (npm) jest bardzo dobrze znany wśród współczesnych programistów. Opierając się na sukcesie podobnych systemów, takich jak Pip Pythona i Ruby's RubyGems, npm szybko zyskało popularność.
Utrzymujące się obawy prowadzą do rozwoju konkurencyjnych menedżerów, takich jak pNPm i Yarn. Istnieją sytuacje, w których możesz nawet zdecydować się na instalację i użytkowanie wielu menedżerów pakietów z Node.
Dzisiaj, jeśli zdecydujesz się programować w Node.js, masz trochę rozpieszczany wybór, jeśli chodzi o zarządzanie pakietami. Node oferuje dobrze prosperujący ekosystem z wieloma opcjami instalowania pakietów. W głównym rejestrze npm znajduje się obecnie ponad 1,3 miliona.
Npm pozwala publikować własne pakiety, prowadząc do oszałamiająco dużej biblioteki.
Deno przyjęło zupełnie inne podejście do zarządzania pakietami. Nie ma ani nie wymaga systemu zarządzania pakietami. Zamiast tego Deno umożliwia bezpośredni import zewnętrznych bibliotek nie tylko z systemu programisty, ale z dowolnej lokalizacji, która akceptuje żądania HTTP.
Pozwala to na importowanie bibliotek z repozytorium Deno lub dowolnego CDN online, bezpośrednio z ich bazy kodu.
Oficjalny rejestr pakietów Deno nie jest tak w pełni rozwinięty jak Node, dzięki prawie dziewięcioletniej przewadze Node. Możliwość importowania bibliotek z dowolnego miejsca chroni Cię przed konsekwencjami ekosystemu, który nie miał jeszcze szansy urosnąć do pełnych rozmiarów.
Zaangażowanie społeczności w Node i Deno
Pierwotnie wydany w 2009 roku przez Ryana Dahla, Node miał mnóstwo czasu, aby społeczność programistów mogła się zaangażować. Mając wielu wczesnych użytkowników i pokaźną bibliotekę pakietów przechowywanych w oficjalnym repozytorium i do Twojej dyspozycji, opinia publiczna miała wiele do powiedzenia na temat rozwoju Node.js.
Sama platforma jest całkowicie open source, utrzymywana przez Fundację OpenJS i wielu współpracowników.
Deno wydany w 2018 roku, prawie 9 lat po Node. Został opracowany głównie przez Ryana Dahla, aby rozwiać obawy i żale, jakie miał w związku z wdrożeniem Node. Dziś Deno jest również open source na licencji MIT.
Dzięki wielu współpracownikom i rosnącemu własnemu repozytorium Deno spotkało się z dużym zainteresowaniem społeczności.
Obawy dotyczące wydajności dwóch platform
Dla programistów zainteresowanych względnymi różnicami w wydajności między dwoma frameworkami, różnica między nimi jest niewielka. Dostosowany silnik Deno napisany w języku Rust nakłada się na podstawową platformę, którą nadal jest silnik V8. Ostatecznie zarówno Deno, jak i Node są porównywalne w prawie wszystkich przypadkach pod względem wydajności.
Wydaje się, że tak jest niezależnie od tego, czy wynikowy kod działa na serwerze, czy na kliencie. Ponieważ wydajność nie jest brana pod uwagę przy podejmowaniu decyzji, możesz swobodnie wybrać ramy, z którymi czujesz się najbardziej komfortowo.
Ryan Dahl, twórca obu frameworków, przedstawił wiele powodów, dla których stworzył Deno. Chociaż wymienił kilka czynników, od niewłaściwego uwzględnienia obietnic w wielu interfejsach API po wybrany przez niego system kompilacji, wydajność nie była częścią tego procesu.
Node vs Deno: który wybór jest właściwy?
Pod maską zarówno Node.js, jak i Deno są niezwykle podobnymi frameworkami. Oba wykonują JavaScript przy użyciu silnika V8 o podobnej wydajności i możliwościach. Chociaż istnieją pewne różnice w składni, zarządzaniu pakietami i wbudowanej obsłudze, wybór, którego chcesz użyć, zależy w dużej mierze od twoich preferencji.
Węzeł może pochwalić się oszałamiająco dużym ekosystemem, ale Deno pozwala na pobieranie zależności z dowolnego źródła. Ostatecznie będziesz musiał przyjrzeć się własnemu stylowi programowania i określić, która platforma jest dla Ciebie bardziej odpowiednia.