Node.js kontra PHP: epicka bitwa o dzielenie się wiedzą dla programistów

To klasyczny hollywoodzki wątek: bitwa między dwoma starymi przyjaciółmi, którzy poszli różnymi drogami. Często tarcie zaczyna się, gdy jeden z kumpli wzbudza zainteresowanie tym, co zawsze było niewypowiedzianą domeną drugiego. W wersji tego filmu w języku programowania jest to wprowadzenie Node.js, które zamienia kumpla w grę urazą: PHP i JavaScript, dwóch partnerów, którzy kiedyś wspólnie rządzili internetem, ale teraz rzucają się w oczy dla części programistów.

W dawnych czasach partnerstwo było proste. JavaScript zajmował się niewielkimi szczegółami w przeglądarce, podczas gdy PHP zarządzało wszystkimi zadaniami po stronie serwera między portem 80 a MySQL. To był szczęśliwy związek, który nadal wspiera wiele kluczowych elementów internetu. Pomiędzy WordPress, Drupal i Facebook, ludzie nie mogą spędzić minuty w Internecie bez uruchomienia PHP.

Potem jakiś sprytny dzieciak odkrył, że może uruchomić JavaScript na serwerze. Nagle nie było potrzeby używania PHP do tworzenia stosów serwerów nowej generacji. Do zbudowania Node.js i frameworków działających na kliencie wystarczył jeden język. „Wszędzie JavaScript” stało się dla niektórych mantrą.

Od tego odkrycia eksplodował JavaScript. Programiści Node.js mogą teraz wybierać między stale rozwijającą się kolekcją doskonałych frameworków i rusztowań: React, Vue, Express, Angular, Meteor i nie tylko. Lista jest długa, a największym problemem jest wybór między doskonałymi opcjami.

Niektórzy postrzegają boom w Node.js jako dowód na to, że JavaScript zdecydowanie wygrywa, a istnieje mnóstwo surowych danych, które potwierdzają ten pogląd. GitHub donosi, że JavaScript jest najpopularniejszym językiem w jego kolekcji repozytoriów, a jego całujący się kuzyn, TypeScript, również szybko się rozwija. Wiele z najfajniejszych projektów jest napisanych w JavaScript i odnosi się do niego wiele najpopularniejszych hashtagów. W międzyczasie PHP spadł z trzeciego miejsca na czwarte w tym rankingu i prawdopodobnie jeszcze bardziej spadł pod względem liczby komunikatów prasowych, wdrożeń produktów i innych mocno reklamowanych momentów.

Ale zanik szumu i oprogramowanie mogą przetrwać dziesiątki lat. Większość kodu PHP nie będzie migrować i nadal będzie obsługiwać duże porcje tekstu, który czytamy każdego dnia. Według niektórych szacunków 40 procent przeglądanych przez nas stron ma w jakiejś formie język PHP. Częściowo wynika to z tego, że PHP wciąż się odradza. W ciągu ostatnich kilku lat wnętrzności systemów działających w PHP zostały całkowicie przepisane. To nie jest ten sam kod PHP, który prowadził witrynę Twojego dziadka.

Zippy, just-in-time kompilator PHP dostarcza odpowiedzi szybciej niż kiedykolwiek dzięki tym samym inteligentnym technikom, które napędzały rewolucję Node.js. Teraz PHP 7.2 i HHVM oferują wiele takich samych sprytnych optymalizacji w locie, które V8 wprowadziło do Chrome i Node.js. Nie tylko to, ale HHVM ma Hack, sprytny dialekt PHP, który oferuje pełne wsparcie dla wyrafinowanych funkcji programistycznych, takich jak lambdy, typy generyczne i kolekcje. Jeśli więc potrzebujesz tych funkcji, nie musisz szukać bardziej w pełni funkcjonalnego stosu.

Oczywiście zakończenie nie jest jeszcze napisane. Na każdego programistę, który krzyczy o czystości i młodości Node.js oraz prostocie JavaScript na całym świecie, jest ktoś, kto jest zadowolony z głębokiej bazy kodu i od dawna rozumianej stabilności PHP. Czy stary koder pokona początki po stronie serwera? Czy JavaScript obali swojego starego przyjaciela, aby zdobyć dominację nad światem? Umieść kolejną porcję popcornu w kuchence mikrofalowej i usiądź.

Gdzie wygrywa PHP: mieszanie kodu z treścią

Piszesz dalej, wlewasz myśli do tekstu swojej witryny i chcesz dodać gałąź do procesu, małe oświadczenie „jeśli-to”, aby wyglądało ładnie, powiedzmy, w zależności od jakiegoś parametru w adresie URL. A może chcesz dodać tekst lub dane z bazy danych. W PHP otwierasz magiczne tagi PHP i zaczynasz pisać kod w ciągu kilku sekund. Nie potrzeba szablonów - wszystko jest szablonem! Nie potrzebujesz dodatkowych plików ani skomplikowanych architektur, tylko programowalne możliwości logistyczne na wyciągnięcie ręki.

Gdzie Node wygrywa: oddzielenie obaw

Mieszanie kodu z treścią to kula, która może cię sparaliżować. Jasne, fajnie jest mieszać kod z HTML przez pierwsze dwa lub trzy razy. Ale wkrótce twój kod staje się zagmatwanym bałaganem logiki. Prawdziwi programiści dodają strukturę i oddzielają warstwę kosmetyczną od warstwy logicznej. Jest bardziej przejrzysty dla nowych programistów i łatwiejszy w utrzymaniu. Struktury działające na Node.js są tworzone przez programistów, którzy wiedzą, że życie jest lepsze, gdy model, widok i kontroler są oddzielne.

Gdzie wygrywa PHP: głęboka baza kodu

Sieć jest wypełniona kodem PHP. Najpopularniejsze platformy do budowy stron internetowych (WordPress, Drupal, Joomla) są napisane w PHP. Nie tylko platformy są open source, ale także większość ich wtyczek. Kod PHP jest wszędzie i czeka, aż pobierzesz, zmodyfikujesz i użyjesz do swoich potrzeb.

Gdzie wygrywa Node: bardziej nowoczesne funkcje

Jasne, istnieją tysiące wspaniałych plików PHP o otwartym kodzie źródłowym, ale niektóre z nich to 12-letnie wtyczki WordPress, które mają nadzieję i modlą się, że ktoś je pobierze. Każda nowoczesna wersja Symfony zawiera zakurzoną, dawno zapomnianą bibliotekę, której nikt nie aktualizuje.

Kto chce spędzać godziny, dni lub tygodnie na małpowaniu kodu, który nie był aktualizowany od lat? Wtyczki Node.js są nie tylko nowsze, ale zostały stworzone z pełną znajomością najnowszych podejść architektonicznych. Zostały stworzone przez programistów, którzy rozumieją, że nowoczesne aplikacje internetowe powinny przekazywać klientowi większość inteligencji.

I chociaż JavaScript ma wiele drobnych dziwactw, które doprowadzają niektórych do szaleństwa, w większości jest to nowoczesny język, który ma nowoczesną składnię i kilka przydatnych funkcji, takich jak domknięcia. Możesz go łatwo zmienić i rozszerzyć, umożliwiając korzystanie z potężnych bibliotek, takich jak jQuery. Możesz przekazywać funkcje jak obiekty. Po co się ograniczać?

Gdzie wygrywa PHP: prostota (w pewnym sensie)

PHP nie ma za wiele: kilka zmiennych i podstawowe funkcje do żonglowania łańcuchami i liczbami. To cienka warstwa, która niewiele robi poza przenoszeniem danych z portu 80 do bazy danych iz powrotem. To właśnie ma robić. Nowoczesna baza danych to magiczne narzędzie i warto pozostawić jej ciężar. PHP to odpowiednia ilość złożoności dla zadania, które nie powinno być złożone.

Z drugiej strony, jeśli jesteś programistą, który chce zrobić coś więcej niż tylko interakcję z bazą danych i formatowanie wyników, możesz teraz zrobić więcej z PHP bez trzymania się za nos. HHVM Facebooka dodaje obsługę Hack, kompletnego języka wypełnionego nowoczesnymi funkcjami, takimi jak adnotacje typu, typy ogólne i wyrażenia lambda. Użycie tego ogranicza twój kod do działania tylko na HHVM, ale to nie jest najgorsza rzecz na świecie. Jest bardzo szybki.

Gdzie wygrywa Node: dziesiątki opcji językowych

Jeśli użytkownicy PHP są zadowoleni z dostępu do Hack, powinni rozważyć przejście do świata Node.js, ponieważ wiele głównych języków można skompilować krzyżowo, aby działały w JavaScript. Istnieją dobrze znane opcje, takie jak Java, C # lub Lisp i dziesiątki innych, takich jak Scala, OCaml i Haskell. Są nawet prezenty dla nostalgicznych miłośników BASIC lub Pascal. Ta lista języków, które kompilują się do JavaScript od Jeremy Ashkenasa jest dość obszerna. Ponadto kuzyni JavaScript, tacy jak TypeScript i CoffeeScript, oferują nieco inne i ulepszone podejście do tej samej gry.

Gdzie wygrywa PHP: żadna aplikacja kliencka nie jest potrzebna

Cała rozmowa o używaniu tego samego języka w przeglądarce i na serwerze jest fajna, ale co, jeśli nie musisz używać żadnego języka w przeglądarce? Co jeśli wysyłasz dane w formacie HTML? A co, jeśli tworzysz spartańską, statyczną stronę internetową, aby dostarczać dokładnie to, co jest potrzebne, bez interaktywnych elementów? Przeglądarka wyskakuje to i nie ma bólów głowy ani usterek spowodowanych błędami w wątkach JavaScript, które próbują utworzyć stronę w przeglądarce z dwóch tuzinów wywołań usług internetowych. Czysty HTML działa częściej niż cokolwiek innego, a PHP jest zoptymalizowane do jego tworzenia. Po co zawracać sobie głowę JavaScriptem w przeglądarce? Zbuduj wszystko na serwerze i unikaj przeciążania tej małej przeglądarki na małym telefonie.

Gdzie wygrywa węzeł: wywołania usług są cieńsze niż wywołania PHP z obsługą HTML-fat

Chociaż szalone w AJAX aplikacje internetowe HTML5 mogą mieć zbyt wiele ruchomych części, są fajne - i bardzo wydajne. Gdy kod JavaScript znajdzie się w pamięci podręcznej przeglądarki, jedyną rzeczą, która porusza się po przewodach, są nowe dane. Nie ma wielu znaczników HTML i nie ma powtarzających się podróży, aby pobrać całą stronę. Zmieniły się tylko dane. Jeśli chcesz poświęcić czas na stworzenie zręcznej aplikacji internetowej po stronie przeglądarki, jest to duża korzyść. Node.js jest zoptymalizowany pod kątem dostarczania danych i tylko danych za pośrednictwem usług internetowych. Jeśli Twoja aplikacja jest złożona i bogata w dane, stanowi dobrą podstawę do wydajnego dostarczania.

Gdzie wygrywa PHP: SQL

PHP zostało zbudowane, aby współistnieć z MySQL i jego wieloma wariantami, takimi jak MariaDB. Jeśli MySQL nie jest dokładnie poprawne, istnieją inne świetne bazy danych SQL firm Oracle i Microsoft. Twój kod może się zmienić po wprowadzeniu kilku zmian w zapytaniach. Ogromny świat SQL nie kończy się na swoich granicach. Niektóre z najbardziej stabilnych, dobrze opracowanych kodów będą współpracować z bazą danych SQL, co oznacza, że ​​całą tę moc można również łatwo zintegrować z projektem PHP. Może nie jest to jedna doskonała, szczęśliwa rodzina, ale jest duża. Nie tylko to, ale świat baz danych powoli staje się lepszy, ponieważ programiści znajdują sposoby na dodanie większej inteligencji do bazy danych, abyś nie musiał tak ciężko pracować.

Gdzie Node.js wygrywa: JSON

Jeśli musisz mieć dostęp do SQL, Node.js ma do tego biblioteki. Ale Node.js mówi również w języku JSON, lingua franca do interakcji z wieloma najnowszymi bazami danych NoSQL. Nie oznacza to, że nie możesz pobrać bibliotek JSON dla swojego stosu PHP, ale jest coś płynnego w prostocie pracy z JSON podczas korzystania z JavaScript. To jedna składnia od przeglądarki, przez serwer WWW, po bazę danych. Dwukropki i nawiasy klamrowe działają wszędzie tak samo. Już samo to uchroni Cię przed godzinami frustracji.

Gdzie wygrywa PHP: szybkość kodowania

Dla większości programistów pisanie PHP dla aplikacji internetowych jest szybsze: bez kompilatorów, bez wdrażania, bez plików JAR lub preprocesorów - po prostu twój ulubiony edytor i kilka plików PHP w katalogu. Twój przebieg będzie różny, ale jeśli chodzi o szybkie połączenie projektu, PHP jest dobrym narzędziem w użyciu.

Gdzie Node.js wygrywa: szybkość aplikacji

Pisanie kodu JavaScript jest nieco trudniejsze, gdy liczysz nawiasy klamrowe i nawiasy, ale kiedy skończysz, Twój kod Node.js może latać. Mechanizm wywołania zwrotnego jest genialny, ponieważ oszczędza ci żonglowania wątkami. Rdzeń jest dobrze zbudowany i zaprojektowany, aby zrobić to wszystko za Ciebie. Czy nie tego chcą wszyscy?

Gdzie wygrywa PHP: Konkurencja

Walka o serca i umysły programistów PHP wciąż trwa. Zespół HHVM i zespół Zend ciężko pracują, aby dostarczyć szybki kod dla wszystkich. Pojawiają się niezależne testy porównawcze i wszyscy przesuwają podstawy kodu do granic możliwości. Oznacza to tylko lepszą wydajność.

Gdzie Node.js wygrywa: Solidarność

Czy naprawdę potrzebujesz dwóch różnych baz kodu? Oczywiście, konkurencja pomaga, ale wkrótce następuje fragmentacja. Co się dzieje, gdy twój kod działa tylko na jednym z dwóch? Konkurencja nic nie da, jeśli musisz spędzić tygodnie lub miesiące na przepisywaniu kodu. Podczas gdy Node.js doświadczył własnego rozpadu kilka lat temu, wraz z uruchomieniem io.js, wszechświat Node.js połączył się ponownie, dając mu rodzaj solidarności językowej, za którą programiści PHP mogą wkrótce tęsknić.

Gdzie wygrywa PHP: podstawowe aplikacje

W ciągu ostatnich kilku lat kilku programistów uruchomiło aplikacje internetowe i było sfrustrowanych ich powolnym zachowaniem. JavaScript, który napędza wszystkie te ruchome elementy, może mieć dziesiątki tysięcy bajtów, czasem setki tysięcy. Kiedy wszystkie pakiety przyjdą, muszą zostać przeanalizowane, skompilowane i na koniec wykonane - wszystko po to, aby dostarczyć kilka bajtów, takich jak temperatura i prognoza.

Sprzeciw wobec tego szaleństwa rococco można znaleźć w zespołach tworzących statyczne generatory witryn (463 w tym piśmie) i okrojonych stronach internetowych w formacie AMP. PHP jest naturalnym wyborem dla każdego zespołu, który chce skoncentrować inteligencję na serwerze, aby klient nie był przeciążony.

Gdzie Node.js wygrywa: Bogactwo

Ludwig Mies van der Rohe, architekt budynków, powiedział kiedyś: „Mniej znaczy więcej”. Robert Venturi, inny architekt, przyszedł i odpowiedział: „Mniej jest nudziarzem”. Smartfony mają więcej mocy niż pomieszczenie pełne komputerów Cray. Komputery stacjonarne są wyposażone w karty graficzne z wieloma wentylatorami, które zapewniają chłodzenie podczas całego przetwarzania. Dlaczego mielibyśmy rozebrać nasz kod i żyć jak ofiara epoki depresji w powieści Steinbecka? Żyj. Duże, zgrabne strony pełne kodu JavaScript przyciągają wzrok, są dramatyczne, a przede wszystkim zabawne. Oczywiście, marnowanie tak dużej przepustowości na kilka bitów danych jest trochę nieprzyzwoite, ale przepustowość nigdy nie była tańsza. Żyć trochę!

Gdzie obaj wygrywają: bez głowy

Słowo „bezgłowy” odnosi się do kodu PHP działającego na serwerze. Niedawno niektóre z najlepszych aplikacji PHP, takie jak Drupal, zajrzały do ​​korytarza i były zdumione wyrafinowanymi interfejsami użytkownika zbudowanymi przez frameworki JavaScript, takie jak React, Angular czy Vue. Zamiast próbować z nimi konkurować, oddają kontrolę nad klientem i koncentrują się na dobrej pracy z zapleczem na serwerze.

Jeśli sporo zainwestowałeś w kod PHP działający na serwerze, może to być sposób, aby cieszyć się najlepszymi z obu podejść. Stary, ugruntowany kod PHP działa jak drzwi wejściowe do bazy danych, podwójnie sprawdzając żądania, czyszcząc dane i generalnie zapewniając całą logikę biznesową. Po stronie klienta jest to progresywna aplikacja internetowa napisana w najnowszym środowisku JavaScript. Gdy potrzebuje informacji, wysyła żądanie AJAX do kodu PHP.

To może nie mieć sensu dla kogoś, kto zaczyna od zera, ale jeśli od lat polegasz na PHP i chcesz iść do przodu stopniowo, może to być szczęśliwy kompromis.

Gdzie obaj wygrywają: mikrousługi i bezserwerowe

Rosnące paradygmaty mikrousług lub bezserwerowe oferują sposób, w jaki kod JavaScript i PHP może współdziałać z serwerem i się dogadać. Oba rozwiązania dzielą pracę na dziesiątki mniejszych usług lub funkcji, które mogą działać niezależnie i pozostać na swoich pasach. Niektóre części, zwykle starsze i najbardziej stabilne sekcje aplikacji, mogą obsługiwać PHP. Pozostałe części, często nowsze, zostaną napisane w Node.js. Językiem POSTlub GETmoże być lingua franca, który ich wszystkich łączy.