نود جی اس Nodejs – سامان بابلی و حامد قلی زاده

رویداد جلسات باز تبریز خوشبختانه همچنان به قوت خودش ادامه دارد. رویدادی که دو بار در ماه برگزار می‌شود و در هر جلسه به موضوع جدیدی پرداخته می‌شود. تا به امروز جلسات باز نرم‌افزاری در موضوعات مختلفی مانند بلاک‌چین، Deep Learning، خوشحال سازی مشتری و UX Writing، ری‌اکت نیتیو (React Native) و… برگزار شده است. در جلسه پنچم جلسات باز تبریز، که با حضور برنامه نویسان رایچت همراه بود، به موضوع Nodejs اختصاص یافت.

سامان بابلی، هم‌بنیانگذار و CTO (مدیر فنی) رایچت، و حامد قلی زاده، هم بنیانگذار و CIO (مدیر فناوری اطلاعات) رایچت، در این جلسه عهده دار ارائه مطالب در مورد Nodejs بودند. سامان بابلی در آغاز به معرفی و مفاهیم نود جی اس پرداخت و در ادامه حامد قلی زاده با اجرای پروژه، بصورت عملی استفاده و قابلیت های Nodejs را نمایش داد.

 

Nodejs چیست؟

Nodejs نه یک زبان برنامه نویسی است، نه یک فریمورک. نود جی اس محیطی است که به ما اجازه می‌دهد کدهای جاوا اسکریپت را در سمت سرور یا ماشین اجرا نماییم. کدهای Nodejs توسط موتور V8 گوگل به زبان ماشین تبدیل می‌شود.

چرا نود جی اس

بطور عمده امروزه Nodejs در مواردی که نیاز به پاسخ به حجم زیاد درخواست‌ها است، استفاده می‌شود.

دلیل استفاده فراوان از Nodejs، سریع بودن آن است که به لطف Non Bloking I/O و Async بودن امکان پذیر شده است. برای درک بهتر این موضوع به یک مثال ساده Async می‌پردازیم. فرض کنید کارمندی در یک اداره برای تکمیل یک گزارش نیاز به دریافت اطلاعاتی از بازرس دارد. زمانی که این کارمند با بازرس تماس می‌گیرد و اطلاعات را از او درخواست می‌کند، بازرس در پاسخ می‌گوید که به نیم ساعت زمان برای تحویل اطلاعت نیاز دارد.

کارمند تا زمان دریافت اطلاعات پشت خط می‌ماند و تلفن در طول مدت دریافت اطلاعات مشغول است (Sync) اما اگر اطلاعات را از بازرس بخواهد و بخواهد بعد از آماده شدن با او تماس بگیرد، می‌تواند در این نیم ساعت کارهای دیگرش را انجام دهد و یا تماس های دیگری بگیرد و … و بعد از نیم ساعت بازرس تماس بگیرد و اطلاعات را به کارمند بدهد. همانطور که دیدید در اینجا چیزی بلاک نشد (Async)

ویژگی های Nodejs

از بهترین ویژگی‌های Nodejs این است که می‌توانید هم در سمت کلاینت (مرورگر) و هم در سمت سرور از یک زبان واحد به نام جاوا اسکریپت استفاده کنید. پس زمان کمتری برای یادگیری نیاز خواهید داشت. همچنین برای راه اندازی MVP ها بسیار عالی‌ست چرا که می‌توانید نسخه مخصوص تمامی پلتفرم‌ها را به کمک آن‌ها راه‌اندازی کنید و زمان خیلی کمتری برای آماده‌سازی آن‌ها صرف کنید.

از برتری‌های دیگر نود جی اس، همراهی اکوسیستم بزرگ و فعال از برنامه نویسان است که تعداد بسیار زیادی ماژول، فریمورک و آموزش را برای Nodejs فراهم کرده‌اند. تمامی ماژول های ساخته شده در سایت npmjs قرار می‌گیرند. npm اختصار عبارت Node Package Manager است.

هر پروژه دارای یک فایل Package.jason است که به عنوان “شناسنامه پروژه” از آن یاد می‌شود. در این فایل اطلاعات کلی در مورد پروژه ما یعنی نام، ورژن، توضیحات و … نگهداری می‌شود، همچنین دارای قسمتی است که نام و ورژن ماژول‌های استفاده شده را ذخیره می‌کند تا در صورت اجرای پروژه توسط سایر اعضای تیم یا بر روی یک سیستم دیگر با اجرای دستور زیر بتوان تمام ماژول‌ها را نصب کرد.

$npm install
در ادامه سامان بابلی به معرفی چند ماژول پرکاربرد و معروف در npm پرداخت. ماژول هایی مانند: express, hapi, socket.io, redis, pm2

Nodejs

Template Engine چیست؟

تمپلیت انجین ها امکانات و متفاوتی را ارائه می‌دهند و معمولا کار کردن با دیتاها در سمت view را برای ما راحت‌تر می‌کنند. به عنوان مثال تمپلیت انجین pug سینتکس کدهای html را برای ما ساده‌تر کرده و همچنین کار با دیتاها نیز آسان شده. از ویژگی های بارز این تمپلیت انجین ها پشتیبانی از حلقه‌ها و یا if هست. برای درک بهتر میتوانید به مثال درون اسلاید ها مراجعه کنید.

فریمورک های Nodejs

Express.js

یکی از معروف ترین فریمورک های nodejs است که مجموعه‌ ای از ویژگی ها همچون API های ساده در اختیار توسعه دهندگان قرار می‌دهد تا در ساختن بخش مدیریت (بک-اند یا Back-End) در یک وبسایت یا اپلیکیشن از آن‌ها استفاده کنند.

Koa.js

تیم توسعه دهنده Express.js توسعه آن را بر عهده داشت و تمرکز بیشتری بر روی Generator ها دارد.

Sails.js

بر پایه معماری MVC است و شبیه Ruby on Rails هست.

Hapi.js

فریمورک دیگری برای Nodejs است که لول بالاتری نسبت به Express.js و Koa.js دارد و ساخت اپلیکیشن ها و سرویس ها را راحت‌تر کرده است.

ECMAScript

ECMAScript نام یک استاندارد است که جاوا اسکریپت از آن پیروی می‌کند. هر ورژن جدید از ECMAScript دارای ویژگی‌های جدیدی است که تا امروز ورژن ES8 منتشر شده است اما آخرین نسخه‌ای که توسط Nodejs پشتیبانی میشود، ورژن ES6 است.

تفاوت web socket و http

در ارتباط از طریق پروتکل http در بازه‌های زمانی مرتب باید درخواست‌هایی از سمت کلاینت به سرور ارسال شود تا در صورت وجود دیتای جدید، آن را دریافت کند. اما در ارتباط از طریق پروتکل Web Socket یک ارتباط همیشگی بین کلاینت و سرور برقرار است که به ایونت‌ها گوش می‌دهند یا می‌توانند ایونت‌ها را به یکدگیر ارسال کنند. به تصویر موجود در اسلاید مراجعه کنید.

از Nodejs استفاده نکنید

اگر در برنامه هایی که مصرف CPU بالا یا به عبارتی محاسبات زیادی دارند، مانند پردازش تصویر. همچنین بهتر است برای برگرداندن فایل های استاتیک به کاربراز nginx استفاده کنید و این کار را به Node.js نسپارید.

از Nodejs استفاده کنید

در اپ های Real Time مانند اپ های چت یا داشبوردهایی که نیاز به بروزرسانی و نمایش مداوم دیتای جدید به کاربر دارد nodejs انتخاب خوبی است. اپلیکیشن چت مثال خوبی برای Nodejs هست چرا که حجم دیتای در حال انتقال و همچنین ترافیک زیادی دارد و نیازی به مصرف CPU ندارد.

در ادامه ارائه سامان بابلی به موضوع Load Balancing در نود جی اس اشاره کرد. در یک جمله میتون لود بالانسینگ را تقسیم رکوست‌های ورودی به چند سرور تعریف کرد. برای درک بهتر این موضوع می‌توانید مطلبی را که در Medium نوشته شده است را مطالعه کنید.

به عنوان موضوعات پایانی به معرفی شرکت‌هایی که از Nodejs استفاده می‌کنند اشاره شد. مانند Uber که تقریبا به عنوان یکی از اولین و بزرگترین استفاده کننده‌های nodejs شناخته می‌شود، که در این لینک اطلاعات بیشتری در این مورد موجود هست. همچنین کسب و کار هایی مانند Paypal، لینکدین، یاهو و … چندین مورد از این شرکت‌ها هستند.

برای دانلود اسلایدهای ارائه سامان بابلی اینجا کلیک کنید.

حامد قلیزاده

حامد قلی زاده

پس از پایان ارائه‌ی سامان بابلی، حامد قلی زاده مدیر فناوری اطلاعات رایچت مفاهیم نود جی اس را به صورت عملی برای حضار نشان داد.

قلیزاده ارائه خود را با مقدمه‌ای از Nodejs آغاز کرد. ابتدا نحوه عملکرد نود جی اس و ماژول‌های آن را به صورت عملی نشان داد. سپس کاربردهای فایل شناسنامه (package.json) را توضیح داد و سپس یک فایل شناسنامه ایجاد کرد. بعد از آن به تشریح نحوه‌ی کار با npm پرداخت و برای مثال ماژول Lodash را نصب کرد و در یک پروژه از آن استفاده کرد.

او نحوه ساخت http سرور در نود جی اس را آموزش داد و با معرفی ماژول Nodemon، که برای ریلود کردن پروسس نود بکار گرفته می‌شود، کار با فریمورک Express.js را آغاز کرد. به کمک فریمورک اکسپرس یک وبسایت چند صفحه‌ای با روت‌های هوشمند ایجاد کرد که بعد از آن، برای جذاب‌تر کردن وبسایت، صفحه ای به آن اضافه کرد که کاربران بتوانند به صورت Real Time در آن چت کنند. او برای پیاده سازی این صفحه از ماژول Socket.io استفاده کرد.

در آخر او با اشاره به پروتکل WebSocket و نحوه عملکرد سوکت‌ها در Nodejs، چت روم پرسرعتی را به کمک آن، پیاده سازی کرد.

او به این نکته نیز اشاره کرد که برای پایداری چت‌ها می‌توان از دیتابیس‌هایی مانند مونگو دی بی استفاده کرد و یا با کش کردن چت‌ها می‌توان از دیتابیس ردیس (که یک دیتابیس درون مموری هست) استفاده کرد. او قبلا ماژول رایکش را دراین حوزه توسعه و در دسترس عموم گذاشته است. در نهایت با معرفی و استفاده از پروسس منیجر PM2 و کاربرد های آن ارائه خود را پایان داد.

با تشکر از Tabriz.io حامی رسانه‌ای جلسات باز

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *