Node.js چیست؟
۱۷ اسفند ۱۴۰۰
پلتفرم Node.js یک محیط runtime سمت سرور برای زبان جاوااسکریپت (JavaScript) است یعنی شما میتوانید بهکمک این پلتفرم از زبان جاوااسکریپت برای توسعه بکاند استفاده کنید. Node.js یکی از بهترین تکنولوژیهای حال حاضر برای توسعهی بکاند است و روز به روز، مخصوصا در آمریکا معروفتر میشود. بههمین دلیل ما در این مقاله تصمیم گرفتیم تا این تکنولوژی را عمیقتر بررسی کنیم و همچنین در انتهای مقاله شرکتهای بزرگ و شناختهشده امروزی که از Node.js برای توسعهی بکاند پروژههایشان استفاده کردهاند را نام میبریم.
Node.js در سال ۲۰۰۹ توسط Ryan Dahl ساخته شد و در پایان این سال شاهد رونمایی از پلتفرم Node.js در کنفرانس European JSConf بودیم. دراصل Node.js با موتور جاوااسکریپت V8 گوگل، یک event loop و یک API سطح پایین برای مدیریت I/O ترکیب شده است. در ابتدا فقط امکان نصب Node.js بر روی لینوکس (Linux) و Mac OS وجود داشت اما سه سال بعد نسخه ویندوز (Windows) معرفی شد.
این پلتفرم امروزه تحت لایسنس MIT و بهصورت متنباز در دسترس است و توسط یک جامعه کاربری عظیم پشتیبانی میشود. طبق بررسی Stack Overflow در سال ۲۰۱۹، Node.js با حدود ۵۰ درصد آرا بهعنوان محبوبترین فریمورک آن سال شناخته شد.
کاربرد Node.js چیست؟
حال که با Node.js آشنا شدید بهسراغ جزئیات میرویم. چه چیزی باعث میشود Node.js برای توسعهدهندگان و شرکتهای نرمافزاری در سرتاسر دنیا جذاب باشد؟
امکان توسعهی API با Node.js
APIها یک بخش جداییناپذیر از نرمافزارهای مدن هستند و تقریبا تمام برنامههای تحت وب به یک بکاند نیاز دارند تا با دیتابیس و یا سایر سرویسهای خارجی ارتباط برقرار کند. با توجه به جامعه کاربری بزرگ Node.js به راحتی میتوانید کتابخانهای برای ایجاد REST یا GraphQL API پیدا کنید. در گذشته Node.js تنها برای برنامههایی که سربار کمی بر روی CPU داشتند استفاده میشد اما بعد از انتشار نسخه ۱۰.۵.۱ با استفاده از worker در threadها میتوانید فعالیتها و عملیات سنگینتری را بهکمک این پلتفرم اجرا کنید.
امکان توسعهی برنامههای مختص استریم با Node.js
هر روز از سرویسهای استریم موجود برای گوشدادن به موزیک و یا تماشای ویدیو استفاده میکنیم و بهکمک این سرویسها بدون دانلود هیچگونه محتوایی بر روی دیسک میتوانیم سریالها، مستندها و … مورد علاقهمان را از اینترنت تماشا کنیم. آیا Node.js بهترین انتخاب برای استریم دادهها است؟ بله! این پلتفرم یک ماژول داخلی برای استریم دارد که این اجازه را میدهد تا حجم عظیمی از دادهها را تکه تکه و به دنبال هم ارسال کنیم. با توجه به این قابلیت، دیگر نیاز به ذخیره دادهها به صورت موقت یا cache کردن دادهها در memory نیست. همچنین به هنگام استریم میتوانید بر روی این chunkها، تغییرات مورد نظر خود را اعمال کنید، بهطور مثال به راحتی میتوانید یک ویدیو را encode کنید.
امکان توسعهی برنامههای Real-time با Node.js
به دلیل این که Node.js به خوبی حجم زیادی از عملیات I/O را مدیریت میکند، میتوانید از آن برای ساخت برنامههای Real-time، نظیر چتروم که کاربران به صورت Real-time با یکدیگر چت کنند، استفاده کنید. یا حتی برای ایجاد یک ابزار مشارکت و همکاری تیمی، جایی که اعضای یک تیم، در یک زمان بتوانند بر روی یک فایل یا داکیومنت، کار کنند. بسیار عالی! ساخت برنامههای مربوط به ویدیو کنفرانس هم مشکلی نخواهد بود. این قابلیت، به خاطر وجود WebSockets و Event APIهای Node.js است.
امکان توسعهی میکروسرویسها با Node.js
اخیرا این روش توسعه برنامهها، بسیار محبوب شده است. به دلیل سبک و سریع بودن Node.js، مقیاسپذیر کردن برنامه و ایدهتان، بسیار آسان خواهد بود. Node.js انتخاب خوبی برای ایجاد و استقرار میکروسرویسها است. همچنین شرکتهای بزرگی برای استفاده از معماری میکروسرویسها، به Node.js مهاجرت کردند.
امکان توسعهی ابزارهای خط فرمان با Node.js
با توجه به وجود حجم بزرگی از پکیجهای مختلف در NPM، به راحتی میتواند ابزارهای خط فرمان پیشرفته و کارآمد مورد نیازتان را به راحتی ایجاد کنید.
دلیل استفاده از Node.js در کسبوکارهای مختلف: مقیاسپذیری
تا به اینجا میدانید چرا افراد فنی و یا توسعهدهندگان، عاشق Node.js هستند! حالا زمان این رسیده است که چرایی مناسب بودن Node.js برای کسبوکارهای مختلف را توضیح دهیم.
Node.js فریمورکی بسیار سریع، با عملکردی عالی، سبک و مناسب برای برنامهنویسی async است. با استفاده از Node.js قادر خواهید بود تا چندین عملیات را در یک زمان، اجرا کنید. علاوه بر این، میتوانید برنامهتان را به صورت serverless، توسط سرویسدهندههای ابری مختلف، نظیر Amazon، Google Cloud Platform، heroku و لیارا، در اختیار کاربران قرار دهید.
Node.js مقیاسپذیری برنامهتان را بیشتر و عملکرد آن را بهتر میکند و هزینهها را برای بهبود آن، کاهش میدهد. تیم توسعهتان زمان زیادی را به دلیل وجود کامپوننتهای آماده و قابل استفاده Node، ذخیره میکنند، به عبارتی ماژولهای موجود Node.js باعث صرفهجویی در زمان میشود. با توجه به تیم و منابع مورد نیازتان، میتوانید در هر لحظه، برنامهتان را بزرگتر کنید، همانند زمانی که شرکتتان را تازه تاسیس و رفته رفته رشد کردید.
شاید هنوز محبوبترین فریمورک نباشد، اما Node.js در بحث ترافیک بر روی وبسایت، فریمورکهای دیگر را شکست داده است. با توجه به بررسیها و گزارشها در رابطه با تکنولوژیهای وب، Node.js توسط وبسایتها و سرویسهایی که حجم ترافیک زیادی دارند، استفاده شده است. این قضیه را میتوانید در نمودار زیر مشاهده کنید.
مزایا Node.js
سالها میتوانیم در رابطه با مزایای Node.js صحبت کنیم. اما اکنون زمان زیادی نداریم و شما تنها میخواهید تا پروژهتان را توسعه دهید. در رابطه با برخی از مزایای مهم Node.js، که هم برای توسعه نرمافزار و هم توسعه کسبوکار مهم هستند، صحبت خواهیم کرد.
- ریپازیتوری متنباز NPM: با بیش از ۶۰ هزار ماژول در دسترس، میتوانید راه حلی برای مشکل خود پیدا کنید، بجای اینکه از صفر شروع به ایجاد یک قابلیت کنید.
- سیستمهای مقیاسپذیر: با توجه به سبک بودن Node.js، به راحتی میتوان آن را به صورت افقی و هم به صورت عمودی (افقی: افزودن تعداد سرور و عمودی: افزایش منابع یک سرور)، توسعه و گسترش داد.
- مناسب برای معماری میکروسرویسها: در رابطه با این موضوع قبلتر صحبت کردیم، اما همچنان ارزش این را دارد که دوباره به آن اشاره کنیم و بگوییم که شرکتهای بزرگ بسیاری، برای استفاده از معماری میکروسرویس، به Node.js مهاجرت کردهاند.
- یک زبان برنامهنویسی برای بکاند و فرانتاند: امروزه تنها زبانی که برای فرانتاند انتخاب میشود، جاوااسکریپت است. با توجه به اینکه میتوان از این زبان در بکاند هم استفاده کرد، باعث افزایش سرعت و بهبود توسعه برنامهها میشود. دیگر لازم نیست که دو تیم جدا برای بکاند و فرانتاند استخدام کنید. این موضوع باعث صرفهجویی در زمان و هزینهها میشود.
- انجام عملیات I/O به صورت non-blocking: مشکل اصلی به هنگام اجرای عملیات I/O، این است که باید تا دریافت پاسخ برای یک درخواست صبر کنید تا بتوانید درخواست یا عملیات جدیدی را اجرا کنید. به دلیل اینکه Node.js تنها یک thread دارد، منتظر ماندن برای یک کوئری در دیتابیس، باعث میشود تا کل برنامه مسدود شود. به همین دلیل باید از non-blocking API استفاده کرد. بعد از استفاده از این نوع APIها، thread میتواند عملیات دیگری را اجرا کند. بعد از پایان اجرای یک عملیات، توسط تابع callback، از این موضوع با خبر خواهید شد. مزیت و نتیجه این موضوع این است که عملکرد بهبود مییابد و میتوان اتصالات زیادی را به صورت همزمان مدیریت کرد.
- کدهایی با قابلیت استفاده مجدد: به دلیل اینکه زبان آن جاوااسکریپت است، به راحتی میتوانید کدها را در میان کامپوننتهای مختلف جابجا کنید. علاوه بر این، از کدهای یکسانی در سمت فرانتاند و بکاند میتوانید استفاده کنید.
- زمانی برای بازاریابی: بیشتر اوقات یک کسبوکار ایده خوبی برای ایجاد یک برنامه دارد اما نیاز است که ابتدا آن را در بازار تایید کند. با استفاده از Node.js میتوانید به راحتی و هر چه سریعتر، MVP را دریافت کنید که باعث کاهش میزان هزینه و تلاش، برای دستیابی به این موضوع میشود.
- تست شده در محیط پروداکشن: از سال ۲۰۰۹ که Node.js منتشر شد، شرکتهای زیادی از آن، در محیط پروداکشن استفاده کردهاند. با توجه به اینکه افراد زیادی از Node.js استفاده کردهاند، Node.js عملکرد خوبی داشته و خودش را اثبات کرده است.
صرفا جهت اینکه بدانید، نه اینکه بی منبع بگوییم، Node.js در گزارش نظرسنجی کاربران، این موضوع را بیان میکند که مزیتهای زیادی برای شما و یا کسبوکارتان دارد. همانطور که در تصویر زیر میبینید، مزایای Node.js تاثیرهای بسزایی در هزینهها، روابط بین تیم، روحیه، رضایت مشتری و … دارد.
حالا زمان آن رسیده که با شرکتهای بزرگی که از Node.js استفاده میکنند، آشنا شوید.
شرکتهایی که از Node.js در برنامههایشان استفاده کردند
Netflix
یکی از بزرگترین و معروفترین سرویسهای استریم در دنیا، با حدود ۱۸۳ میلیون سابسکرایبر در ۲۰۲۰. انتخاب یک تکنولوژی برای مدیریت ۱ میلیارد ساعت استریم، بدون توجه به سایر درخواستها به این سرویس، به صورت هفتگی، مساله مهمی است و اصلا شوخی نیست. Netflix روز به روز معروفتر و سریعتر میشود، همچنین به این دلیل Node.js را انتخاب کردهاند که توسعهدهندگان آنها با جاوااسکریپت آشنا بودند و نیازی به یادگیری زبان و تکنولوژی جدید نداشتند و در عین حال عاشق ماژولهایی که Node.js ارائه میداد، شدند! با ارائه Node.js، شرکت Netflix زمان startup خودشان را از ۴۰ دقیقه به زیر یک دقیقه کاهش دادند.
PayPal
در حال حاضر بیش از ۳۲۵ میلیون اکانت فعال دارد. در ۳ ماه ابتدایی ۲۰۲۰، میزان پرداختها در پیپال، ۱۹۰.۵۷ میلیارد دلار، به همراه ۳.۲۶ میلیارد دلار از طریق تراکنشهای آنلاین تشخیص داده شد. باید بپذیریم که این اعداد بسیار زیاد است. پیپال از Node.js برای ساخت بخشهایی از برنامه که توسط کاربر نهایی استفاده میشود، استفاده کرده است. مزیت دیگر Node.js که از آن بهره میبرند، این است که یک تیم از توسعهدهندگان، تنها از جاوااسکریپت برای توسعه در سمت سرور و مرورگر استفاده میکنند. با استفاده از Node.js، تیم توسعه پیپال کوچکتر شد و سرعت توسعه، با افزودن ماژولها به برنامه، افزایش یافت. معرفی Node.js باعث شد که تعداد درخواستها در پیپال در لحظه دو برابر شود و زمان پاسخگویی برای یک صفحه ۲۰۰ میلیثانیه سریعتر شود.
در ۲۰۱۶، مایکروسافت LinkedIn را در ازای قیمت سرسامآور ۲۶ میلیون دلار بدست آورد و تا ۲۰۲۰، بیش از ۶۷۵ میلیون کاربر دارد. در رابطه با سرور تلفن همراه، Node.js کاملا Node-based است. تیم LinkedIn تصمیم گرفتند که از دو مزیت Node.js نهایت استفاده را ببرند، مقیاسپذیری آسان و ارتباط با سایر سرویسها (برنامه تلفن همراه LinkedIn با دیتابیسها و APIها ارتباط برقرار میکند).
Uber
در ۶۵ کشور و بیش از ۶۰۰ شهر در دسترس است و بیش از ۱۴ میلیون سفر روزانه را مدیریت میکند. در کل، حدود ۴ میلیون راننده Uber، تا به حال بیش از ۱۰ میلیارد بار، مسافران را به مقصدهایشان رساندهاند.
به جهت رسیدگی به میلیونها اطلاعیه، هماهنگ کردن رانندهها و مسافران و درخواستهای در طول روز، Uber به یک راه حل سریع و قابل اطمیان نیاز داشت. آنها به این دلیل Node.js را انتخاب کردند که از طریق آن میتوانند اطلاعات زیادی را به سرعت پردازش کنند و به راحتی و بدون راهاندازی مجدد برنامه، مشکلهای آن را برطرف کنند. حالا تیم توسعه Uber به راحتی و در صورت نیاز میتوانند کد جدید را مستقر کنند.
Groupon
در ۲۰۲، وبسایت Groupon بیش ۲۰۰ میلیون بار دانلود برای برنامه تلفن همراه و ۴۱.۸ میلیون مشتری منحصر به فرد دارد که حداقل یک معامله را در سال انجام دادهاند.
بعد از مهاجرت از Ruby on Rails، تیم توسعه Groupon، متوجه مزایای Node.js شدند. ۵۰ درصد زمان بارگذاری سریعتر، استفاده کمتر از سختفزار و منابع برای مدیریت همان درخواستهای قبلی، آسانتر بودن استقرار و پیادهسازی قابلیتهای مختلف بدون توجه به سایر تیمهای مهندسی.
eBay
با ۱۸۲ میلیون کاربر در ۱۹۰ کشور که بازار غالب آن را ایالات متحده تشکیل میدهد (۳۵ درصد از کاربران تلفن همراه در ایالات متحده). این حجم از ترافیک نیازمند یک تکنولوژی مقیاسپذیر، سریع و پایدار و در عین حال، هدف از مهاجرت به Node.js برای شرکت eBay دو مورد بوده است: real-time بودن حداکثر برنامه و اتصال و تنظیم سرویسهای eBay که اطلاعات را به کاربران نهایی نمایش میدهند. نیازی به گفتن موارد بیشتر نیست، تمام اهدافی که نیاز داشتند محقق شده است.
NASA
در آخر اینکه ممکن است Node.js در رابطه با علوم موشکها و نجوم نباشد، اما قطعا به این علوم کمک زیادی کرده است. قطعا NASA یکی از مهمترین سازمانها در تمام جهان است (کهکشان راه شیری؟ کل جهان؟) و مطمئنا وقتی با یک تکنولوژی مهم و مفید رو به رو میشود، آن را تشخیص میدهد و از آن بهره میبرد. در حقیقت Node.js زندگی انسانها را در فضا نجات میدهد.
در طول یک فضانوردی در سال ۲۰۱۳، فضانوردی با نام Luca Parmitano، به دلیل اینکه آب به کلاهاش راه یافته بود، در حال دست و پنجه نرم کردن با مرگ بود. خوشبختانه همکارش، Chris Cassidy آنجا حضور داشت و او را نجات داد. بعد از این واقعه، NASA تمام فضانوردیها را لغو کرد و شروع به تحقیق در رابطه با دلیل این اتفاق کرد.
تیم NASA، از جاوااسکریپت استفاده میکردند، پس انتخاب Node.js کل پلتفرم را پیرامون یک پایه و اساس تشکیل میداد. این موضوع هزینه و زمان توسعه را کاهش داد. مزیتهای دیگری که به کمک NASA آمد، این دو مورد هستند: event loop async برای انجام عملیات I/O در دیتابیسها ابری و هماهنگی npm با Docker برای ساخت میکروسرویسها، به نحوی که هر API، تابع و برنامه به راحتی و جداگانه کار کنند.
اکنون، با توجه به مقاله Node.js Helps NASA Keep Astronauts Safe and Data Accessible، سیستم از معماری میکروسرویسها با APIهای جدا از هم و برنامههای داخلی Node.js برای انتقال دادههای مرتبط به لباسهای فضایی EVA از سه دیتابیس سنتی جدا، به دیتابیس ابری استفاده میکند، که باعث کاهش ۳۰۰ درصدی زمان دسترسی به مجموعه کامل دادهها میشود.
البته این لیست، لیست کاملی نیست. شرکتهای بزرگی از Node.js استفاده میکنند، نظیر: 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.
همانطور که در ابتدای مقاله اشاره کردیم، Node.js محبوبترین تکنولوژی برای ایجاد بکاند است، پس بعد از مطالعه این مقاله، یکی از گزینههایی که به هنگام انتخاب یک تکنولوژی در نظر داشته باشید، باید Node.js باشد.