چرا از NodeJS استفاده کنیم؟
۱۲ مرداد ۱۳۹۹

NodeJS یکی از بهترین تکنولوژیها برای توسعه بکاند است و روز به روز معروفتر میشود، مخصوصا در آمریکا، زیرا پادشاهی خودش را از سیلیکون ولی آغاز کرد. جای تعجب نیست که بیش از ۱۷۵,۳۹۸ وبسایت (که برخی از آنها جایگاه بزرگی در بازار دارند)، از NodeJS به عنوان تکنولوژی بکاند استفاده میکنند. در این مقاله مزایای NodeJS را بررسی میکنیم، همچنین شرکتهای بزرگ و شناختهشده امروزی، که از NodeJS در سمت بکاند استفاده میکنند را نام میبریم. در انتها به یک سوال مهم، یعنی: چرا از NodeJS استفاده کنیم؟ پاسخ میدهیم.
NodeJS چیست؟
پلتفرم NodeJS یک محیط runtime سمت سرور، بر اساس زبان جاوااسکریپت است. این دقیقا به این معنی است که میتوانید از جاوااسکریپت برای توسعه بکاند استفاده کنید.
این موضوع خبر خوبی است، زیرا توسعهدهندگان میتوانند برای توسعه بکاند و فرانتاند از یک زبان برنامهنویسی استفاده کنند. جلوتر در رابطه با موارد استفاده NodeJS نیز صحبت خواهیم کرد.
NodeJS در سال ۲۰۰۹، توسط Ryan Dahl ساخته شد و در پایان این سال، در کنفرانس European JSConf رونمایی شد. NodeJS با موتور جاوااسکریپت V8 گوگل، یک event loop و یک API سطح پایین برای مدیریت I/O، ترکیب شده است. در ابتدای مسیر، NodeJS تنها بر روی لینوکس و Mac OS قابل استفاده بود، اما سه سال بعد، نسخه ویندوز معرفی شد.
با این شروع کوچک، امروزه تحت لایسنس MIT، متنباز است و توسط یک جامعه کاربری عظیم پشتیبانی میشود و صدها مورد دیگر که به محبوبیت این فریمورک میافزایند. طبق بررسی Stack Overflow در سال ۲۰۱۹، NodeJS با حدود ۵۰ درصد آرا، در دسته فریمورکها، کتابخانهها و ابزارها، محبوبترین است.

سرویسهای بر اساس NodeJS، روز به روز معروفتر میشوند. از این رو آنها هر سال، دوبار نسخه جدیدی را ارائه میکنند. در حال حاضر، نسخه با پشتیبانی بلند مدت، یعنی نسخه 14، در آپریل ۲۰۲۳ منتشر خواهد شد.
برای اطلاعات بیشتر از نسخه 14 میتوانید به مقاله قابلیتهای جدید NodeJS 14، مراجعه کنید.
کاربرد NodeJS چیست؟
بسیار عالی، شما نکات اساسی را متوجه شدید. حالا باید سراغ جزئیات برویم. چه چیزی باعث میشود که NodeJS برای توسعهدهندگان و شرکتهای نرمافزاری در سرتاسر دنیا، جذاب باشد؟
API
امروزه بخش عمدهای از برنامهها را APIها تشکیل میدهند. تقریبا تمام برنامههای تحت وب، به یک بکاند نیاز دارند تا با دیتابیس و یا سایر سرویسهای خارجی ارتباط برقرار کند. با توجه به این جامعه کاربری بزرگ NodeJS، به راحتی میتوانید کتابخانهای برای ایجاد REST یا GraphQL API پیدا کنید. در گذشته، NodeJS تنها برای برنامههایی که عملیاتها و سربار کمی بر روی CPU داشتند استفاده میشد. بعد از انتشار نسخه 10.5.0 با استفاده از worker در threadها، میتوان فعالیتها و عملیاتهای سنگینتری را اجرا کرد.
برنامههای مخصوص استریم
هر روز از سرویسهای استریم موجود، برای گوشدادن به موزیک و یا تماشای ویدیو، استفاده میکنیم. بدون دانلود هیچگونه محتوایی بر روی دیسک، میتوانیم از طریق اینترنت، سریالها، مستندها و … مورد علاقهمان را تماشا کنیم. آیا NodeJS بهترین انتخاب برای استریم دادهها است؟ بله! یک ماژول داخلی برای استریم دارد که این اجازه را میدهد تا حجم عظیمی از دادهها را تکه تکه و به دنبال هم، ارسال کنیم. با توجه به این قابلیت، دیگر نیاز به ذخیره دادهها به صورت موقت یا cache کردن دادهها در memory، نیست. همچنین به هنگام استریم، میتوانید بر روی این تکهها یا chunkها، کار کنید، به طور مثال به راحتی میتوانید یک ویدیو را encode کنید.
برنامههای Real-time
به دلیل این که NodeJS به خوبی حجم زیادی از عملیاتهای I/O را مدیریت میکند، میتوانید از آن برای ساخت برنامههای Real-time، نظیر چتروم که کاربران به صورت Real-time با یکدیگر چت کنند، استفاده کنید. یا حتی برای ایجاد یک ابزار مشارکت و همکاری تیمی، جایی که اعضای یک تیم، در یک زمان بتوانند بر روی یک فایل یا داکیومنت، کار کنند. بسیار عالی! ساخت برنامههای مربوط به ویدیو کنفرانس هم مشکلی نخواهد بود. این قابلیت، به خاطر وجود WebSockets و Event APIهای NodeJS است.
میکروسرویسها
اخیرا این روش توسعه برنامهها، بسیار محبوب شده است. به دلیل سبک و سریع بودن NodeJS، مقیاسپذیر کردن برنامه و ایدهتان، بسیار آسان خواهد بود. NodeJS انتخاب خوبی برای ایجاد و استقرار میکروسرویسها است. همچنین شرکتهای بزرگی برای استفاده از معماری میکروسرویسها، به NodeJS مهاجرت کردند.
ابزارهای خط فرمان
با توجه به وجود حجم بزرگی از پکیجهای مختلف در NPM، به راحتی میتواند ابزارهای خط فرمان پیشرفته و کارآمد مورد نیازتان را به راحتی ایجاد کنید.
دلیل استفاده از NodeJS در کسبوکارهای مختلف: مقیاسپذیری
تا به اینجا میدانید چرا افراد فنی و یا توسعهدهندگان، عاشق NodeJS هستند! حالا زمان این رسیده است که چرایی مناسب بودن NodeJS برای کسبوکارهای مختلف را توضیح دهیم.
NodeJS فریمورکی بسیار سریع، با عملکردی عالی، سبک و مناسب برای برنامهنویسی async است. با استفاده از NodeJs قادر خواهید بود تا چندین عملیات را در یک زمان، اجرا کنید. علاوه بر این، میتوانید برنامهتان را به صورت serverless، توسط سرویسدهندههای ابری مختلف، نظیر Amazon، Google Cloud Platform، heroku و لیارا، در اختیار کاربران قرار دهید.
NodeJS مقیاسپذیری برنامهتان را بیشتر و عملکرد آن را بهتر میکند و هزینهها را برای بهبود آن، کاهش میدهد. تیم توسعهتان زمان زیادی را به دلیل وجود کامپوننتهای آماده و قابل استفاده Node، ذخیره میکنند، به عبارتی ماژولهای موجود NodeJS باعث صرفهجویی در زمان میشود. با توجه به تیم و منابع مورد نیازتان، میتوانید در هر لحظه، برنامهتان را بزرگتر کنید، همانند زمانی که شرکتتان را تازه تاسیس و رفته رفته رشد کردید.
شاید هنوز محبوبترین فریمورک نباشد، اما NodeJS در بحث ترافیک بر روی وبسایت، فریمورکهای دیگر را شکست داده است. با توجه به بررسیها و گزارشها در رابطه با تکنولوژیهای وب، NodeJS توسط وبسایتها و سرویسهایی که حجم ترافیک زیادی دارند، استفاده شده است. این قضیه را میتوانید در نمودار زیر مشاهده کنید.

مزایا NodeJS
سالها میتوانیم در رابطه با مزایای NodeJS صحبت کنیم. اما اکنون زمان زیادی نداریم و شما تنها میخواهید تا پروژهتان را توسعه دهید. در رابطه با برخی از مزایای مهم NodeJS، که هم برای توسعه نرمافزار و هم توسعه کسبوکار مهم هستند، صحبت خواهیم کرد.
- ریپازیتوری متنباز NPM: با بیش از ۶۰ هزار ماژول در دسترس، میتوانید راه حلی برای مشکل خود پیدا کنید، بجای اینکه از صفر شروع به ایجاد یک قابلیت کنید.
- سیستمهای مقیاسپذیر: با توجه به سبک بودن NodeJS، به راحتی میتوان آن را به صورت افقی و هم به صورت عمودی (افقی: افزودن تعداد سرور و عمودی: افزایش منابع یک سرور)، توسعه و گسترش داد.
- مناسب برای معماری میکروسرویسها: در رابطه با این موضوع قبلتر صحبت کردیم، اما همچنان ارزش این را دارد که دوباره به آن اشاره کنیم و بگوییم که شرکتهای بزرگ بسیاری، برای استفاده از معماری میکروسرویس، به NodeJS مهاجرت کردهاند.
- یک زبان برنامهنویسی برای بکاند و فرانتاند: امروزه تنها زبانی که برای فرانتاند انتخاب میشود، جاوااسکریپت است. با توجه به اینکه میتوان از این زبان در بکاند هم استفاده کرد، باعث افزایش سرعت و بهبود توسعه برنامهها میشود. دیگر لازم نیست که دو تیم جدا برای بکاند و فرانتاند استخدام کنید. این موضوع باعث صرفهجویی در زمان و هزینهها میشود.
- انجام عملیاتهای I/O به صورت non-blocking: مشکل اصلی به هنگام اجرای عملیاتهای I/O، این است که باید تا دریافت پاسخ برای یک درخواست صبر کنید تا بتوانید درخواست یا عملیات جدیدی را اجرا کنید. به دلیل اینکه NodeJS تنها یک thread دارد، منتظر ماندن برای یک کوئری در دیتابیس، باعث میشود تا کل برنامه مسدود شود. به همین دلیل باید از non-blocking API استفاده کرد. بعد از استفاده از این نوع APIها، thread میتواند عملیات دیگری را اجرا کند. بعد از پایان اجرای یک عملیات، توسط تابع callback، از این موضوع با خبر خواهید شد. مزیت و نتیجه این موضوع این است که عملکرد بهبود مییابد و میتوان اتصالات زیادی را به صورت همزمان مدیریت کرد.
- کدهایی با قابلیت استفاده مجدد: به دلیل اینکه زبان آن جاوااسکریپت است، به راحتی میتوانید کدها را در میان کامپوننتهای مختلف جابجا کنید. علاوه بر این، از کدهای یکسانی در سمت فرانتاند و بکاند میتوانید استفاده کنید.
- زمانی برای بازاریابی: بیشتر اوقات یک کسبوکار ایده خوبی برای ایجاد یک برنامه دارد اما نیاز است که ابتدا آن را در بازار تایید کند. با استفاده از NodeJS میتوانید به راحتی و هر چه سریعتر، MVP را دریافت کنید که باعث کاهش میزان هزینه و تلاش، برای دستیابی به این موضوع میشود.
- تست شده در محیط پروداکشن: از سال ۲۰۰۹ که NodeJS منتشر شد، شرکتهای زیادی از آن، در محیط پروداکشن استفاده کردهاند. با توجه به اینکه افراد زیادی از NodeJS استفاده کردهاند، NodeJS عملکرد خوبی داشته و خودش را اثبات کرده است.
صرفا جهت اینکه بدانید، نه اینکه بی منبع بگوییم، NodeJS در گزارش نظرسنجی کاربران، این موضوع را بیان میکند که مزیتهای زیادی برای شما و یا کسبوکارتان دارد. همانطور که در تصویر زیر میبینید، مزایای NodeJS تاثیرات بسزایی در هزینهها، روابط بین تیم، روحیه، رضایت مشتری و … دارد.

حالا زمان آن رسیده که با شرکتهای بزرگی که از NodeJS استفاده میکنند، آشنا شوید.
شرکتهایی که از NodeJS در برنامههایشان استفاده کردند
? Netflix
یکی از بزرگترین و معروفترین سرویسهای استریم در دنیا، با حدود ۱۸۳ میلیون سابسکرایبر در ۲۰۲۰. انتخاب یک تکنولوژی برای مدیریت ۱ میلیارد ساعت استریم، بدون توجه به سایر درخواستها به این سرویس، به صورت هفتگی، مساله مهمی است و اصلا شوخی نیست. Netflix روز به روز معروفتر و سریعتر میشود، همچنین به این دلیل NodeJS را انتخاب کردهاند که توسعهدهندگان آنها با جاوااسکریپت آشنا بودند و نیازی به یادگیری زبان و تکنولوژی جدید نداشتند و در عین حال عاشق ماژولهایی که NodeJS ارائه میداد، شدند! با ارائه NodeJS، شرکت Netflix زمان startup خودشان را از ۴۰ دقیقه به زیر یک دقیقه کاهش دادند.
? PayPal
در حال حاضر بیش از ۳۲۵ میلیون اکانت فعال دارد. در ۳ ماه ابتدایی ۲۰۲۰، میزان پرداختها در پیپال، ۱۹۰.۵۷ میلیارد دلار، به همراه ۳.۲۶ میلیارد دلار از طریق تراکنشات آنلاین تشخیص داده شد. باید بپذیریم که این اعداد بسیار زیاد است. پیپال از NodeJS برای ساخت بخشهایی از برنامه که توسط کاربر نهایی استفاده میشود، استفاده کرده است. مزیت دیگر NodeJS که از آن بهره میبرند، این است که یک تیم از توسعهدهندگان، تنها از جاوااسکریپت برای توسعه در سمت سرور و مرورگر استفاده میکنند. با استفاده از NodeJS، تیم توسعه پیپال کوچکتر شد و سرعت توسعه، با افزودن ماژولها به برنامه، افزایش یافت. معرفی NodeJS باعث شد که تعداد درخواستها در پیپال در لحظه دو برابر شود و زمان پاسخگویی برای یک صفحه ۲۰۰ میلیثانیه سریعتر شود.
در ۲۰۱۶، مایکروسافت LinkedIn را در ازای قیمت سرسامآور ۲۶ میلیون دلار بدست آورد و تا ۲۰۲۰، بیش از ۶۷۵ میلیون کاربر دارد. در رابطه با سرور تلفن همراه، NodeJS کاملا Node-based است. تیم LinkedIn تصمیم گرفتند که از دو مزیت NodeJS نهایت استفاده را ببرند، مقیاسپذیری آسان و ارتباط با سایر سرویسها (برنامه تلفن همراه LinkedIn با دیتابیسها و APIها ارتباط برقرار میکند).
? Uber
در ۶۵ کشور و بیش از ۶۰۰ شهر در دسترس است و بیش از ۱۴ میلیون سفر روزانه را مدیریت میکند. در کل، حدود ۴ میلیون راننده Uber، تا به حال بیش از ۱۰ میلیارد بار، مسافران را به مقصدهایشان رساندهاند.
به جهت رسیدگی به میلیونها اطلاعیه، هماهنگ کردن رانندهها و مسافران و درخواستهای در طول روز، Uber به یک راه حل سریع و قابل اطمیان نیاز داشت. آنها به این دلیل NodeJS را انتخاب کردند که از طریق آن میتوانند اطلاعات زیادی را به سرعت پردازش کنند و به راحتی و بدون راهاندازی مجدد برنامه، مشکلات آن را برطرف کنند. حالا تیم توسعه Uber به راحتی و در صورت نیاز میتوانند کد جدید را مستقر کنند.
? Groupon
در ۲۰۲، وبسایت Groupon بیش ۲۰۰ میلیون بار دانلود برای برنامه تلفن همراه و ۴۱.۸ میلیون مشتری منحصر به فرد دارد که حداقل یک معامله را در سال انجام دادهاند.
بعد از مهاجرت از Ruby on Rails، تیم توسعه Groupon، متوجه مزایای NodeJS شدند. ۵۰ درصد زمان بارگذاری سریعتر، استفاده کمتر از سختفزار و منابع برای مدیریت همان درخواستهای قبلی، آسانتر بودن استقرار و پیادهسازی قابلیتهای مختلف بدون توجه به سایر تیمهای مهندسی.
? eBay
با ۱۸۲ میلیون کاربر در ۱۹۰ کشور که بازار غالب آن را ایالات متحده تشکیل میدهد (۳۵ درصد از کاربران تلفن همراه در ایالات متحده). این حجم از ترافیک نیازمند یک تکنولوژی مقیاسپذیر، سریع و پایدار و در عین حال، هدف از مهاجرت به NodeJS برای شرکت eBay دو مورد بوده است: real-time بودن حداکثر برنامه و اتصال و تنظیم سرویسهای eBay که اطلاعات را به کاربران نهایی نمایش میدهند. نیازی به گفتن موارد بیشتر نیست، تمام اهدافی که نیاز داشتند محقق شده است.
? NASA
در آخر اینکه ممکن است NodeJS در رابطه با علوم موشکها و نجوم نباشد، اما قطعا به این علوم کمک زیادی کرده است. قطعا NASA یکی از مهمترین سازمانها در تمام جهان است (کهکشان راه شیری؟ کل جهان؟) و مطمئنا وقتی با یک تکنولوژی مهم و مفید رو به رو میشود، آن را تشخیص میدهد و از آن بهره میبرد. در حقیقت NodeJS زندگی انسانها را در فضا نجات میدهد.
در طول یک فضانوردی در سال ۲۰۱۳، فضانوردی با نام Luca Parmitano، به دلیل اینکه آب به کلاهاش راه یافته بود، در حال دست و پنجه نرم کردن با مرگ بود. خوشبختانه همکارش، Chris Cassidy آنجا حضور داشت و او را نجات داد. بعد از این واقعه، NASA تمام فضانوردیها را لغو کرد و شروع به تحقیق در رابطه با دلیل این اتفاق کرد.
تیم NASA، از جاوااسکریپت استفاده میکردند، پس انتخاب NodeJS کل پلتفرم را پیرامون یک پایه و اساس تشکیل میداد. این موضوع هزینه و زمان توسعه را کاهش داد. مزیتهای دیگری که به کمک NASA آمد، این دو مورد هستند: event loop async برای انجام عملیاتهای I/O در دیتابیسها ابری و هماهنگی npm با Docker برای ساخت میکروسرویسها، به نحوی که هر API، تابع و برنامه به راحتی و جداگانه کار کنند.
اکنون، با توجه به مقاله Node.js Helps NASA Keep Astronauts Safe and Data Accessible، سیستم از معماری میکروسرویسها با APIهای جدا از هم و برنامههای داخلی NodeJS برای انتقال دادههای مرتبط به لباسهای فضایی EVA از سه دیتابیس سنتی جدا، به دیتابیس ابری استفاده میکند، که باعث کاهش ۳۰۰ درصدی زمان دسترسی به مجموعه کامل دادهها میشود.
البته این لیست، لیست کاملی نیست. شرکتهای بزرگی از NodeJS استفاده میکنند، نظیر: Twitter، Medium، Wall Street Journal، Aliexpress، Tumblr، Github، BBC، Home Depot، IBM، Coursera، Mastercard، Trello، Pinterest، Sony، Siemens، BMW، Target، Airbnb، Walmart، Mozila، Wikipedia، The New Yorker و Change.org.
همانطور که در ابتدای مقاله اشاره کردیم، NodeJS محبوبترین تکنولوژی برای ایجاد بکاند است، پس بعد از مطالعه این مقاله، یکی از گزینههایی که به هنگام انتخاب یک تکنولوژی در نظر داشته باشید، باید NodeJS باشد.