۸ راهکار افزایش سرعت اپلیکیشن Node.js روی هاست (کش، فشرده‌سازی، CDN و ...)

پلتفرم
۸ راهکار افزایش سرعت اپلیکیشن Node.js روی هاست (کش، فشرده‌سازی، CDN و ...)

افزایش سرعت Node.js هنگامی نتیجه می‌دهد که بدانید درخواست کاربر دقیقا کجا معطل می‌ماند. گاهی یک کوئری سنگین پاسخ را عقب می‌اندازد و گاهی منابع محدود هاست اجازه نمی‌دهد برنامه ظرفیت واقعی خود را نشان دهد. لذا کند بودن اپلیکیشن Node.js را باید از دو سمت کد و زیرساخت بررسی کرد. برای بهینه‌سازی عملکرد Node.js لازم نیست همه تنظیمات را همزمان تغییر دهید. در این مقاله، هشت راهکار کاربردی را مرور می‌کنیم و سپس سراغ نشانه‌هایی می‌رویم که می‌گویند زمان بررسی هاست رسیده است.

۸ راهکار افزایش سرعت اپلیکیشن Node.js

قبل از تغییر، گلوگاه را اندازه بگیرید

وقتی فقط می‌دانید برنامه کند است، انتخاب راه‌ حل بیشتر شبیه حدس‌ زدن می‌شود. زمان پاسخ مسیرهای پرترافیک، مدت اجرای کوئری‌ها و مصرف CPU و حافظه را ثبت کنید. سپس با پروفایلینگ مشخص کنید کدام تابع بیشترین زمان پردازنده را می‌گیرد. برای شروع می‌توانید برنامه را در محیط آزمایشی با دستور زیر اجرا کنید:

node --cpu-prof app.js

فایل خروجی را در ابزار سازگار با پروفایل CPU بررسی کنید. این قدم برای افزایش سرعت Node.js زمانی ارزشمند است که چند عامل احتمالی دارید و نمی‌خواهید برای اصلاح بخش اشتباه وقت بگذارید. تاخیر سرویس‌های بیرونی را هم جداگانه ثبت کنید.

از نسخه LTS پشتیبانی‌ شده استفاده کنید

نسخه قدیمی ممکن است شما را از اصلاحات و بهبودهای موتور V8 محروم کند. یک نسخه LTS پشتیبانی‌ شده و سازگار با وابستگی‌های پروژه انتخاب کنید. توجه کنید که جدیدترین نسخه منتشر شده الزاما انتخاب مناسب محیط عملیاتی نیست. ابتدا تست‌ها و سناریوهای اصلی را در محیط آزمایشی اجرا کنید و سپس مصرف منابع و زمان پاسخ را مقایسه کنید. ارتقای نسخه برای افزایش سرعت Node.js یک فرصت است، نه تضمین سریع‌تر شدن تمام برنامه‌ها. این راهکار خصوصا برای پروژه‌هایی اهمیت دارد که مدت زیادی بدون به‌ روزرسانی مانده‌اند.

بیشتر بخوانید: Node.js برای چه پروژه‌هایی مناسب است

 

کش در Node.js را هدفمند پیاده کنید

اگر فهرست دسته ‌بندی‌ها با هر درخواست دوباره از دیتابیس خوانده شود، پردازش تکراری ایجاد می‌کنید. کش درون‌ حافظه برای داده‌های کوچک در یک پردازش ساده است. Redis می‌تواند داده‌های کش ‌شده را میان چند نمونه برنامه مشترک کند. کش در Node.js باید زمان انقضا، سقف مصرف حافظه و روش حذف داده قدیمی داشته باشد. برای پاسخ‌های عمومی نیز هدر Cache-Control را متناسب با ماهیت محتوا تنظیم کنید. اطلاعات خصوصی کاربران نباید وارد کش عمومی شوند. این روش افزایش سرعت Node.js برای داده‌های پرتکرار و کم ‌تغییر، مانند تنظیمات عمومی فروشگاه، کاربرد زیادی دارد.

حجم پاسخ‌ها را با فشرده ‌سازی کاهش دهید

گاهی پردازش سرور سریع است، اما انتقال فایل‌های حجیم کاربر را منتظر می‌گذارد. gzip یا Brotli می‌توانند حجم پاسخ‌های متنی مانند HTML، CSS، JavaScript و JSON را کاهش دهند که البته پشتیبانی مرورگر و تنظیمات سرور باید بررسی شود. فشرده‌ سازی را ترجیحا در لایه پروکسی یا CDN مدیریت کنید و برای فایل‌های ثابت، نسخه فشرده را از قبل بسازید. افزایش سرعت Node.js از این مسیر زمانی محسوس‌تر است که پاسخ‌ها حجیم یا اینترنت کاربران محدود باشد. فشرده‌ سازی شدید و لحظه‌ای هم هزینه CPU دارد.

کوئری‌ها و اتصال‌های دیتابیس را اصلاح کنید

اگر بیشتر زمان درخواست در انتظار دیتابیس می‌گذرد، تغییر کدهای نامرتبط کمکی نمی‌کند. کوئری‌های کند را شناسایی کنید، برنامه اجرای آن‌ها را ببینید و برای ستون‌های مناسب ایندکس بسازید. ایندکس اضافی نیز هزینه نوشتن و نگهداری دارد. فقط فیلدهای مورد نیاز را بخوانید و فهرست‌های بزرگ را صفحه ‌بندی کنید. به‌ جای ساخت اتصال برای هر درخواست، از connection pool با اندازه متناسب استفاده کنید. این مسیر افزایش سرعت Node.js برای پنل‌ها و فروشگاه‌های داده ‌محور مهم است مخصوصا وقتی تعداد کوئری‌ها با تعداد اقلام نتیجه افزایش پیدا می‌کند.

Event Loop را با محاسبات سنگین مسدود نکنید

تبدیل تصویر یا پردازش یک ساختار داده بزرگ در مسیر درخواست می‌تواند رسیدگی به درخواست‌های دیگر را عقب بیندازد. صرفا اضافه‌ کردن async به یک تابع، محاسبات سنگین آن را از نخ اصلی خارج نمی‌کند. برای کارهای محاسباتی از worker threads و ترجیحا مجموعه‌ای از workerهای قابل استفاده مجدد کمک بگیرید. کارهای قابل‌ تعویق، مانند تولید گزارش، می‌توانند در صف قرار بگیرند و توسط پردازش جداگانه انجام شوند. این راهکار افزایش سرعت Node.js زمانی مناسب است که اجرای یک عملیات خاص، همزمان پاسخ مسیرهای دیگر را نیز کند می‌کند.

ظرفیت چند هسته را با چند پردازش به کار بگیرید

اگر یک پردازش زیر فشار است اما هسته‌های دیگر ظرفیت آزاد دارند، اجرای چند نمونه برنامه می‌تواند توان پاسخگویی را بیشتر کند. Cluster یا حالت خوشه‌ای PM2 برای توزیع درخواست‌ها میان پردازش‌ها کاربرد دارند. تعداد پردازش‌ها را براساس CPU و حافظه مجاز هاست تنظیم کنید زیرا هر نمونه حافظه جداگانه مصرف می‌کند. نشست‌ها و وضعیت مشترک را نیز به حافظه محلی یک پردازش وابسته نکنید. این روش افزایش سرعت Node.js بیشتر به ظرفیت زیر بار کمک می‌کند.

CDN و reverse proxy را درست پیکربندی کنید

لازم نیست برنامه اصلی همه فایل‌های ثابت را مستقیما ارسال کند. CDN می‌تواند نسخه کش ‌شده تصاویر، فونت‌ها و فایل‌های عمومی را از نقطه نزدیک‌تر به کاربر تحویل دهد و بار سرور مبدا را کاهش دهد. یک reverse proxy مانند Nginx نیز می‌تواند تحویل فایل ثابت، فشرده‌ سازی و هدایت درخواست‌ها را مدیریت کند. این ترکیب برای افزایش سرعت Node.js در پروژه‌های دارای مخاطبان پراکنده مفید است. اما CDN به ‌تنهایی کوئری کند یا محاسبات سنگین پشت یک API خصوصی را اصلاح نمی‌کند.

بهبود را چطور اندازه بگیریم؟

برای سنجش افزایش سرعت Node.js، قبل و بعد از هر تغییر سناریوی یکسانی را با autocannon یا k6 اجرا کنید. تعداد کاربران همزمان، داده آزمایشی و وضعیت کش باید قابل ‌مقایسه باشند. تست بار را ابتدا در محیط آزمایشی انجام دهید. علاوه بر میانگین، p95 را بررسی کنید. یعنی زمانی که ۹۵ درصد درخواست‌ها حداکثر در آن تکمیل شده‌اند. نرخ خطا، توان پردازش درخواست‌ها و مصرف منابع را هم ثبت کنید. کاهش زمان پاسخ Node.js وقتی ارزش دارد که با افزایش خطا یا حذف بخشی از کار همراه نباشد.

 

بیشتر بخوانید: رایج‌ترین خطاهای اجرای Node.js روی هاست

چه زمانی مشکل کندی از خود هاست است؟

کمبود رم یا CPU

رسیدن مداوم به سقف CPU، محدود سازی پردازنده یا خاتمه پردازش بر اثر کمبود حافظه، نشانه بررسی منابع است. البته نشت حافظه با خرید رم بیشتر برطرف نمی‌شود. لذا شما باید منابع مورد نیاز هاست Node.js را بررسی کرده و سپس خریدرای کنید..

دیسک کند و اهمیت SSD یا NVMe

اگر دیتابیس یا فایل‌ها روی دیسک همان سرور باشند، تاخیر ذخیره‌ سازی اهمیت پیدا می‌کند. SSD یا NVMe می‌تواند به بارهای وابسته به دیسک کمک کند، اما نام فناوری کافی نیست و باید محدودیت IOPS و تاخیر واقعی را هم بررسی کنید.

فاصله سرور تا کاربران و تاخیر شبکه

اگر زمان پردازش داخلی پایین است اما کاربران دورتر پاسخ دیرتری می‌گیرند، مسیر شبکه را بررسی کنید. نزدیکی سرور به کاربران و دیتابیس، بسته به الگوی درخواست‌ها، می‌تواند موثر باشد.

منابع اشتراکی با پروژه‌های دیگر

افت سرعت در ساعت‌های مشخص، بدون تغییر محسوس ترافیک خودتان، می‌تواند نشانه رقابت بر سر منابع باشد. برای افزایش سرعت Node.js در چنین شرایطی، نمودار محدودیت‌ها را از میزبان بخواهید زیرا اشتراکی ‌بودن به ‌تنهایی اثبات مشکل نیست.

اگر بعد از بهینه‌سازی هنوز کند است، پلن‌های هاست Node.js برنت را ببینید.

 

سوالات متداول

بهترین راه پیدا کردن گلوگاه برای افزایش سرعت Node.js چیست؟

برای بررسی کند بودن اپلیکیشن Node.js، زمان درخواست، کوئری و سرویس بیرونی را جدا کنید و سپس بخش مشکوک را پروفایل بگیرید.

آیا افزایش رم سرعت را بالا می‌برد؟

فقط وقتی حافظه گلوگاه باشد. کاهش زمان پاسخ Node.js در برنامه‌ای با کوئری نامناسب، الزاما با افزایش رم اتفاق نمی‌افتد.

آیا برای Node.js به CDN نیاز دارم؟

اگر فایل عمومی پرترافیک یا مخاطب پراکنده دارید، مفید است؛ برای هر پروژه‌ای ضرورت ندارد.

 

کلام پایانی

همانگونه که دیدید در این مقاله به طور کامل به بررسی راهکارهای افزایش سرعت اپلیکیشن Node.js پرداختیم. دانستیم که شما باید افزایش سرعت Node.js را با اندازه‌ گیری شروع کنید، گلوگاه کد را برطرف کنید و سپس تناسب زیرساخت را بسنجید. بهینه‌ سازی عملکرد Node.js زمانی پایدار می‌ماند که اثر هر تغییر ثبت شود و تصمیم بعدی بر همان نتیجه تکیه کند. از همراهی شما متشکریم.

به منظور دریافت مشاوره رایگان برای انتخاب پلن کافیست با ما تماس بگیرید.

مقالات مرتبط

مشاهده همه