W ostatnich latach JavaScript szybko się rozwinął. Głównym powodem jest to, że każda przeglądarka obsługuje JavaScript, więc javascript jest de facto językiem przeglądarek po stronie klienta. Jeśli chcesz stworzyć stronę internetową i zapewnić świetny UX, najlepszym wyborem będzie JavaScript. Szybkie rozprzestrzenianie się języka JavaScript wynika również z jego silnej społeczności. Według ankiety Stackoverflow javascript jest najpopularniejszą technologią w 2017 r., a według żądania ściągnięcia GitHub javascript ma ogromny zasięg w GitHub, z ponad dwukrotnie większą liczbą żądań ściągnięcia niż drugi wiodący język.

JavaScript jest dziś używany nie tylko w interfejsie, ale także w backendzie i na urządzeniach mobilnych. JavaScript ma interfejs React, Vue i Angular. Widzimy reakcje natywne, jonowe i natywne na urządzeniach mobilnych. Na zapleczu mają express, koa, meteor i wiele innych. Ze względu na dużą społeczność javascript ma również wiele frameworków ułatwiających pracę. Każdy framework twierdził, że jest najlepszy. Wszyscy to wiemy, ale faktyczny problem polega na tym, jak zdecydować, który z nich jest dla nas odpowiedni?

Ten artykuł został pierwotnie napisany w oparciu o prawdziwy projekt w naszym miejscu pracy „Skyshi”. Skyshi to firma zajmująca się tworzeniem oprogramowania, która skupiła się na pomocy startupowi w rozwoju poprzez skalowanie jego systemu i zapewnienie dodatkowego zespołu dla Twojego startupu. Skyshi wykorzystuje wiele frameworków w wielu różnych językach programowania. Ostatnio Skyshi decyduje się wybrać JavaScript jako swój podstawowy język programowania. W frontendzie używamy Reactjs, na mobile używamy React Native, zaś backend korzystamy z jakiegoś frameworka NodeJS. Aha, skupimy się na technologii backendowej.

Jak powiedziałem wcześniej, wybór odpowiedniego frameworka jest trudny, więc podjęcie decyzji na podstawie porównania z nimi jest właściwym powodem. Porównajmy te frameworki wymienione poniżej:

Porównujemy także powyższe frameworki z natywnym serwerem NodeJS.

Te frameworki są obecnie popularne, ale założę się, że zastanawiasz się, czym jest framework Merapi? Merapi został stworzony przez Kata.ai. Kata.ai to indonezyjska firma zajmująca się sztuczną inteligencją konwersacyjną, skupiająca się na poprawie zrozumienia ludzkich rozmów i ulepszeniu sposobu, w jaki ludzie współpracują z maszynami. Framework Merapi to wtykowy kontener wstrzykiwania zależności dla Node.js. Merapi to framework oparty na komponentach z językiem maszynopisu zbudowanym na bazie frameworka Express.

Wynik testu porównawczego pokaże, która platforma ma najwięcej żądań na sekundę (rps). Wszyscy wiemy, że wszystkie te frameworki są wystarczająco szybkie, aby obsłużyć dowolną aplikację. Naszym celem jest pokazanie, jak przeprowadzić rzetelne porównanie frameworków. Aby uzyskać rzetelne porównanie, skonfiguruj każdy framework z tym samym wynikiem wyjściowym, a także usuń wszystkie zależności, takie jak rejestrator, oprogramowanie pośredniczące i debugowanie, abyśmy mogli porównać Apple do Apple.

Skonfigurujmy

Najpierw skonfiguruj nowy serwer w VULTR w najniższej cenie, który ma 512 MB RAM i 1 rdzeń procesora. Zainstaluj najnowszą wersję NodeJS i NPM na swoim serwerze.

Następnie zainstaluj bibliotekę do testów porównawczych. Używamy biblioteki autocannon. Autocannon to narzędzie do testowania HTTP/1.1 napisane w węźle, obsługujące potokowanie HTTP i HTTPS.

$ npm i autocannon -g

Po instalacji sklonuj to repozytorium na swoim własnym serwerze lub laptopie/komputerze. Uruchom npm run install, aby zainstalować cały framework, który będziemy testować. Po pomyślnym zainstalowaniu wszystkich zależności zacznijmy je testować.

Wyniki

Uruchom prosty test przy użyciu testu porównawczego działka automatycznego z testem 2 typów, zwykłym i testem potokowym.
Najpierw skonfiguruj działko automatyczne do zwykłego testu z połączeniem w konfiguracji 1024 i limitem czasu 30 sekund na 10 sekund, zobacz poniższe polecenie:

autocannon -c 1024 -t30 http://yourhost:port

Jeśli korzystasz z mojego repozytorium, po prostu wpisz npm run plain i sprawdź wynik w pliku results-plain.txt. Oto wyniki:

Wyklucz zwykły serwer, tylko Koa i Molecular, które upłynęły 5000 obr./s. Koa z powodzeniem wygrał cienki z Molecular i lepszy daleko na szczycie wśród innych frameworków. Express, Merapi i Feather osiągały średnio 3000 obr./s, a ostatnie, Loopback 2, Loopback 3 i Nest osiągały średnio tylko 2000 obr./s.

Drugi test. Skonfiguruj działo automatyczne do testu potoku z konfiguracją połączenia 1024, 10 potokami i limitem czasu 30 sekund na 10 sekund, zobacz poniższe polecenie:

autocannon -c 1024 -t30 -p 10 http://yourhost:port

Jeśli korzystasz z mojego repozytorium, po prostu wpisz npm run pipeline i sprawdź wynik w pliku results-pipeline.txt. Oto wyniki:

Wszystkie frameworki wzrosły. W międzyczasie znacznie wzrosły ceny Express, Nest i Feather, podczas gdy Merapi, Molecular, Koa i Loopback utrzymują się na stabilnym poziomie.

Aktualizacja

W prawdziwym świecie serwer z 512MB RAM i 1-rdzeniowym procesorem jest zbyt słaby, aby uruchomić serwer NodeJS. Decyduję się więc na modernizację serwera z 4 GB RAM i 2-rdzeniowym procesorem. Przejdź do panelu VULTR i zmień swój plan. Aktualizacja może zająć kilka minut.

Teraz wykonaj test ponownie. Oto wyniki:

Po aktualizacji serwera wydajność wszystkich frameworków znacznie wzrosła. Nawet Koa i Molecular przekroczyły 10000 żądań na sekundę.

Ale czekaj, po uruchomieniu rurociągu, z Molecularem jest dziwnie. Wzrosły wszystkie frameworki z wyjątkiem Molecular. Koa nadal jest najlepszy, ale Pióro ma ogromną poprawę, zwiększoną ponad dwukrotnie w porównaniu z poprzednią wersją.

Wniosek

Koa wygrał benchmark. Drugi molekularny, ale po testach z rurociągiem ma tendencję do opadania. Feather i Express mają w przybliżeniu tę samą liczbę obrotów na sekundę, ale Feather wytwarza więcej obrotów na sekundę podczas korzystania z rurociągu. Zarówno Koa, Merapi, jak i Express zostały zbudowane w oparciu o Express, ale Koa wyprodukował większą liczbę obrotów na sekundę, mniejszy rozmiar i jest solidniejszy. Tak więc, w oparciu o wyniki testów porównawczych, rozważasz użycie Koa w swoim następnym projekcie. Jeśli jednak masz inny powód, na przykład wsparcie społeczności lub więcej gwiazdek w GitHubie, możesz wybrać inne.