NestJS به عنوان یک فریمورک کاربردی قدرتمند Node.js طیف گسترده ای از ویژگی ها را برای ساخت برنامه های سمت سرور ارائه می دهد. با کشف مزایای آن توسط توسعه دهندگان، محبوبیت آن همچنان در حال افزایش است. با این حال، زمانی که صحبت از ساخت یک برنامه NestJS می شود، پرفورمنس اغلب نادیده گرفته می شود. در این مقاله، چند تکنیک عملی برای ساخت یک برنامه NestJS با کارایی بالا را مورد بحث قرار میدهم.
Architecture Choice:
بهطور پیشفرض، NestJS به دلیل محبوبیتش از Express برای اجرا اولیه استفاده میشود.اگرچه برخی هزینهها وجود دارد، عملکرد NestJS از Express چندان دور نیست. اما اگر پرفورمنس اولویت اول است، گزینه بهتر استفاده از Fastify است که بسیار سریعتر از Express است. که ما این قابلیت را داریم که آن را عوض کنیم.
در زیر نتایج تست معیار اخیر برای Nest-Express در مقابل Nest-Fastify و در مقابل Express به تنهایی آورده شده است. می بینیم که Nest-Fastify بیش از 3 برابر سریعتر از Nest-Express است.
اگر شما یک برنامه جدید با NestJS ساخته اید یکی از اولین مواردی که باید در نظر بگیرید این است که آیا باید به Express پایبند باشید یا با Fastify شروع کنید و اگر تصمیم گرفته اید مهاجرت به Fastify از Express نیز امکانپذیر است، زیرا Nest استفاده از آداپتور آن را فراهم میکند.
Caching:
caching می تواند عملکرد برنامه NestJS یا هر برنامه وب را به طور چشمگیری بهبود بخشد. این یک موضوع پیچیده است و یکی از دو چیز سخت در محاسبات در نظر گرفته می شود. با این حال، NestJS با API هایی که خودش فراهم کرده این کار را آسان کرده است.
cache manager NestJS را فراهم کرده است .cache manager یک API برای ارائه دهندگان مختلف ذخیره سازی کش فراهم می کند.
ارائهدهنده ذخیرهسازی پیشفرض یک ذخیرهسازی اطلاعات درون حافظه است و داخلی است. برای فعال کردن کش در حافظه، باید CacheModule را مانند زیر استفاده کنیم.
برای گزینه های پیکربندی بیشتر، به داکیومنت مراجعه کنید.
میتوانید به تعدادی دیگر از ارائهدهندههای ذخیرهسازی تغییر دهید، برای مثال: redis store
صرف نظر از اینکه کدام ارائه دهنده ذخیره سازی را انتخاب می کنید، می توانید یک اینترسپتور کش کردن برای اتوماتیک کش کردن هر ریسپانس استفاده کنید.
Enable Gzip:
فعال کردن فشرده سازی Gzip می تواند عملکرد API را تا حد زیادی بهبود بخشد. این نه تنها با NestJS کار می کند، بلکه برای هر سرویس Web API معمولی قابل اجرا است. اجرای آن آسان و بسیار موثر است، اما در عین حال به راحتی فراموش می شود.
Gzip درخواست ها و پاسخ های API را فشرده می کند. نتیجه تا 10 برابر کاهش بار است.
می توانید فشرده سازی Gzip را از طریق Nginx فعال کنید. اکثر برنامههای NestJS پشت Nginx قرار دارند و میتوانید Nginx را طوری پیکربندی کنید که از gzip برای فشردهسازی پاسخ HTTP در لحظه استفاده کند. مثال زیر برای فعال کردن Gzip در nginx.conf است.
راه دیگر این است که Gzip را در برنامه NestJS فعال کنید. در برنامه NestJs خود، می توانید از compression middleware ارائه شده برای فشرده سازی و ارائه محتوا استفاده کنید.
در مثال بالا compression middleware برای فعال کردن فشرده سازی gzip برای همه درخواست های برنامه استفاده می شود. این به برنامه اجازه می دهد پاسخ را با استفاده از gzip فشرده کند، که می تواند عملکرد و کارایی برنامه را بهبود بخشد.
Cluster Mode:
به طور پیش فرض، نمونه برنامه NestJS در یک رشته اجرا می شود. از آنجایی که همه سرورها دارای چندین هسته CPU هستند، نمونه تک رشته ای از منابع سرور به طور کامل استفاده نمی کند.
برای استفاده از چندین هسته برای بهبود عملکرد، می توانیم از ماژول Cluster در NodeJS استفاده کنیم. در حالت خوشهای، پردازشهای فرزند بهعنوان یک خوشه اجرا میشوند، بنابراین درخواستهای دریافتی به طور همزمان مدیریت میشوند. باعث خروجی بهتر می شود.
ایجاد یک سرویس کلاستر در NestJS ساده است. در زیر نمونه ای از پیاده سازی آورده شده است:
خلاصه :
بهینه سازی عملکرد یک برنامه NestJS یک کار پیچیده و چند وجهی است. در این مقاله، نحوه استفاده از ویژگیهای داخلی NestJS مانند Fastify و Cache Manager برای بهبود عملکرد را مورد بحث قرار دادیم. ماژول های Gzip و Cluster نیز معمولاً برای بهینه سازی نه تنها NestJS بلکه سایر برنامه های وب NodeJS نیز استفاده می شوند را به صورت کوتاه بررسی کردیم.
امیدوارم این مطالب کمی بهتون کمک کرده باشه:)