Javascript so'nggi yillarda tez o'sdi. Buning asosiy sababi shundaki, har bir brauzer JavaScript-ni qo'llab-quvvatlaydi, shuning uchun JavaScript brauzerlarning defacto mijoz tilidir. Agar siz veb-sayt yaratmoqchi bo'lsangiz va ajoyib UX bilan ta'minlamoqchi bo'lsangiz, JavaScript sizning eng yaxshi tanlovingizdir. Javascriptning tez tarqalishi ham uning kuchli hamjamiyatidan kelib chiqadi. Stackoverflow so'roviga ko'ra, javascript 2017 yilda eng ommabop texnologiya bo'lib, GitHub pull so'roviga ko'ra, JavaScript GitHub-da katta izga ega bo'lib, ikkinchi yetakchi tilga qaraganda ikki baravar ko'proq tortish so'rovlariga ega.

Bugungi kunda Javascript nafaqat frontend tomonidan, balki backend va mobil qurilmalarda ham qo'llaniladi. Javascriptning frontend qismida React, Vue va Angular mavjud. Biz mobil telefonda reaktiv, ion va mahalliy yozuvni ko'ramiz. Orqa tomonda ular ekspress, koa, meteor va boshqalarga ega. Katta hamjamiyat tufayli JavaScript ham ishingizni osonlashtiradigan juda ko'p ramkalarga ega. Har bir ramka o'zlarini eng yaxshi deb da'vo qildi. Biz hammamiz buni bilamiz, lekin asosiy muammo shundaki, qaysi biri bizga mos kelishini qanday hal qilish kerak?

Ushbu maqola dastlab bizning ish joyimizda haqiqiy loyiha asosida yozilgan "Skyshi". Skyshi dasturiy ta'minot ishlab chiqaruvchi kompaniya bo'lib, u o'z tizimini kengaytirish va startapingizga qo'shimcha jamoani taqdim etish orqali startapning rivojlanishiga yordam berishga qaratilgan. "Skyshi" juda ko'p turli xil dasturlash tillarida juda ko'p ramkalardan foydalanadi. So'nggi paytlarda "Skyshi" o'zining asosiy dasturlash tili sifatida javascriptni tanlashga qaror qildi. Frontendda biz reactjs-dan foydalanamiz, biz foydalanadigan mobil react-nativ-dan, backend esa ba'zi NodeJS ramkalaridan foydalanamiz. Aha, biz backend texnologiyasiga e'tibor qaratmoqchimiz.

Yuqorida aytganimdek, to'g'ri ramka tanlash qiyin, shuning uchun ularni taqqoslash orqali qaror qabul qilish to'g'ri sababdir. Quyida keltirilgan ushbu ramkalarni solishtiramiz:

  • "ExpressJS"
  • "FeatherJS"
  • "Molekulyar"
  • "NestJS"
  • "Qayta 2"
  • "Qayta 3"
  • "Merapi"
  • "Koa"

Shuningdek, biz yuqoridagi ramkalarni mahalliy NodeJS serveri bilan taqqoslaymiz.

Ushbu ramkalar hozirda mashhur, ammo men sizda Merapi ramkasi nima degan savol tug'ilishi mumkin. Merapi "Kata.ai" tomonidan yaratilgan. "Kata.ai" Indoneziyaning suhbatdosh sun'iy intellekt kompaniyasi bo'lib, u inson suhbatlarini tushunishni yaxshilashga, odamlarning mashinalar bilan hamkorlik qilish usullarini yaxshilashga qaratilgan. Merapi ramkasi Node.js uchun plaginlanadigan bog'liqlik inyeksiya konteyneridir. Merapi komponentga asoslangan ramka bo'lib, ekspress ramkaning yuqori qismida joylashgan yozuv tiliga ega.

Benchmarking natijasi soniyada eng ko'p so'rovga ega bo'lgan ramka ishlab chiqaradi (rps). Biz hammamiz bilamizki, ushbu ramkalarning barchasi har qanday dasturni boshqarish uchun etarlicha tezdir. Bizning maqsadimiz ramkalar o'rtasida adolatli taqqoslashni qanday amalga oshirishni ko'rsatishdir. Adolatli taqqoslash uchun har bir ramkani bir xil chiqish natijasi bilan sozlang va shuningdek, logger, vositachi dastur va disk raskadrovka kabi barcha bog'liqliklarni olib tashlang, shuning uchun biz olma bilan olma taqqoslashimiz mumkin.

Sozlaymiz

Birinchidan, 512 MB RAM va 1 yadroli protsessorga ega bo'lgan eng past narxga ega "VULTR" da yangi serverni o'rnating. Serveringizga eng so'nggi NodeJS va NPM versiyasini o'rnating.

Keyin, taqqoslash uchun kutubxonani o'rnating. Biz "autocannon" kutubxonasidan foydalanamiz. "Autocannon" - bu HTTP/1.1 taqqoslash vositasi bo'lib, u HTTP quvurlari va HTTPS-ni qo'llab-quvvatlaydi.

$ npm i autocannon -g

O'rnatishdan so'ng, "ushbu omborni" o'z serveringizga yoki noutbukga/kompyuteringizga klonlang. Biz sinab ko'rmoqchi bo'lgan barcha ramkalarni o'rnatish uchun npm run install ni ishga tushiring. Barcha bog'liqliklarni muvaffaqiyatli o'rnatgandan so'ng, ularni taqqoslashni boshlaylik.

Natijalar

2 turdagi sinovli, oddiy va quvur liniyasi sinovi bilan avtokanon benchmark yordamida oddiy sinovni oʻtkazing.
Birinchidan, 1024 konfiguratsiya ulanishi va 30 soniya kutish vaqti bilan oddiy sinov uchun avtomatik toʻpni sozlang, quyidagi buyruqni koʻring:

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

Agar siz mening repomdan foydalansangiz, shunchaki npm run plain yozing va natijani results-plain.txt faylida tekshiring. Mana natijalar:

Oddiy server bundan mustasno, faqat Koa va 5000 rpps o'tgan molekulyar. Koa boshqa ramkalar orasida molekulyar va eng yuqori ustunlikni muvaffaqiyatli qo'lga kiritdi. Express, Merapi va Feather o'rtacha 3000 rps tezlikni o'tkazdi va oxirgi, Loopback 2, Loopback 3 va Nest o'rtacha 2000 rps tezlikka erishdi.

Ikkinchi sinov. 1024 konfiguratsiya ulanishi, 10 quvur liniyasi va 30 soniya kutish vaqti 10 soniya bilan quvur liniyasi sinovi uchun avtokanonni o'rnating, quyidagi buyruqni ko'ring:

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

Agar siz mening repomdan foydalansangiz, shunchaki npm run pipeline yozing va natijani results-pipeline.txt faylida tekshiring. Mana natijalar:

Barcha ramkalar ko'paydi. Ekspress, Nest va Feather sezilarli darajada oshdi, shu bilan birga Merapi, Molecular, Koa va Loopback barqaror.

Yangilash

Haqiqiy dunyoda 512 MB RAM va 1 yadroli protsessorga ega server NodeJS serverini ishga tushirish uchun juda zaif. Shuning uchun men serverni 4 GB RAM va 2 yadroli protsessor bilan yangilashga qaror qildim. VULTR boshqaruv paneliga o'ting va rejangizni o'zgartiring. Yangilash uchun bir necha daqiqa vaqt ketishi mumkin.

Endi yana sinovdan o'ting. Mana natijalar:

Serverni yangilashdan so'ng, barcha ramkalar unumdorligi sezilarli darajada oshdi. Hatto, Koa va Molekulyar soniyada 10000 dan ortiq so'rovlar o'tgan.

Ammo kuting, quvur liniyasi bilan ishlagandan so'ng, Molekulyar bilan g'alati narsa bor. Molekulyardan tashqari barcha ramkalar ortdi. Koa hali ham eng yaxshisi, ammo Feather katta yaxshilanishga ega, avvalgidan ikki baravar ko'proq o'sdi.

Xulosa

Koa benchmarkingda g'olib chiqdi. Ikkinchisi molekulyar, ammo quvur liniyasi bilan sinovdan o'tgandan keyin u pastga tushadi. Feather va Express taxminan bir xil miqdordagi rpsga ega, ammo Feather quvur liniyasidan foydalanganda ko'proq rps ishlab chiqaradi. Koa, Merapi va Express ikkalasi ham Express orqasida qurilgan, ammo Koa ko'proq rps, kichikroq va mustahkamroq ishlab chiqargan. Shunday qilib, taqqoslash natijalariga asoslanib, siz keyingi loyihangiz uchun Koa-dan foydalanishni o'ylaysiz. Ammo, agar sizda hamjamiyatni qo'llab-quvvatlash yoki GitHub'da ko'proq yulduz kabi boshqa sabab bo'lsa, boshqalarni tanlashingiz mumkin.