NodeJS یک چارچوب نرم افزاری برای پیاده سازی نرم افزارهای تعاملی پرکار با سربار زیاد برای سرور میباشد که بسیار قدرتمند عمل کرده و بازدهی بسیار خوبی داشته است.
قبلها JavaScript تنها برای اجرای کد در سمت کاربر استفاده میشد. اجرای کد در سمت کاربر بیشتر برای جنبههای نمایشی و یا Ajax کاربرد داشت، ولی با روی کار آمدن NodeJs میتوان با JavaScritp مانند PHP و Ruby برنامههای سمت سرور قدرتمند ساخت.
NodeJS بدلیل قابلیتهای منحصر به فردش توانسته است نظر برنامه نویسان زیادی را به خود جلب کند بنابراین بی نهایت Package و افزونه و آموزش برای آن وجود دارد.
جامعه کاربری NodeJS بسیار وفادار و پیشرو است بنابراین آینده بسیار روشنی برای این چارچوب نرم افزاری تصور میشود.
چرا باید از NodeJS استفاده کرد؟
زبانهای برنامه نویسی PHP و Ruby و Java واقعا عالی هستند ولی با تعداد کانکشن بالا مشکل دارند، مثلا اگر یک سرور با 10 گیگ رم داشته باشیم حداکثر در این سرور میتوان 4 هزار کانکشن ایجاد کرد و برای افزایش امکان پذیرش کاربران باید سرورهای بیشتری اجاره کرد و این یعنی هزینههای سرسام آور.
NodeJS بدلیل ماهیت خاصی که دارد پاسخگوی تعداد زیادی در خواست است به نحوی که در سرور فوق الذکر میتواند تعداد بسیار زیادی Connection ایجاد کرده و به همه آنها پاسخگو باشد.
NodeJS برای پاسخگویی به حجم بالای کاربران از روش non-blocking I/O
بهره میبرد. روش non-blocking I/O
نوعی از نوع عملکردهاست که برنامه منتظر پاسخگویی نمیماند و برنامه شما در حین پردازش دچار وقفه نمیشود.
پیاده سازی وبسرور ساده با NodeJS
برای نمایش سادگی و قدرت NodeJS در پایین یک وبسرور TCP با پورت 6000 ایجاد میکنیم که پیامهای دریافتی را در خروجی نمایش میدهد.
var net = require('net');
var server = net.createServer(function (stream) {
stream.write('Hi\r\n');
stream.on('data', function (data) {
stream.write(data);
});
stream.on('end', function () {
stream.end('Bye\r\n');
});
});
server.listen(6000, 'localhost');
همانطور که در بالا میبینید یک وب سرور با چند خط کد به سادگی پیاده سازی شد.
در چه موقعیتهایی از NodeJS بهره ببریم؟
به پیشنهاد خود NodeJS در برنامههای متکی بر ورودی و خروجی و نرم افزارهای RealTime استفاده از NodeJS بهترین بازدهی را دارد.
NodeJS در اجرای فرامین خود پس از فرا خواندن یک API منتظر پاسخ نمیماند و سراغ API بعدی میرود این امر باعث میشود در نرم افزارهای تعاملی بهترین بازدهی را داشته باشد.
مزایای NodeJS
- پاسخگوی تعداد زیادی کاربر و بسیار سریع
- نیاز نداشتن به درگیر شدن در مباحثی پیچیده مانند thread-safety و Multithreading
- جامعه کاربری بزرگ و Package Manger بزرگ
- متن باز بودن
- در هر سیستم عاملی از جمله لینوکس، ویندوز، مک قابل پیاده سازی است
معایب NodeJS
- سختی یادگیری این زبان
- تاخیر زیاد در وظایف تداخلی بدلیل اجرا شدن تک رشته ای
- سیستمهای نوشته شده با NodeJS شدیدا وابسته به برنامه نویس خود هستند چون بدلیل نداشتن یک کتابخانه استاندارد برای JavaScript از استانداردهای پراکندهای برای نوشتن سورس کدها استفاده میشود.
- در سیستمهای NodeJS خرابی فرایندها بیشتر از سایر سیستمها است.