گزارش جلسه پنجم جلسات باز نرمافزاری تبریز: رایچتی ها از nodejs میگویند
رویداد جلسات باز نرمافزاری خوشبختانه همچنان به قوت خودش ادامه دارد. رویدادی که دو بار در ماه برگزار میشود و در هر جلسه به موضوع جدیدی پرداخته میشود. تا به امروز جلسات باز نرمافزاری در موضوعات مختلفی مانند بلاکچین، Deep Learning، خوشحال سازی مشتری و UX Writing، ریاکت نیتیو (React Native) و… برگزار شده است. در جلسه پنچم جلسات باز نرمافزاری، که با حضور برنامه نویسان رایچت همراه بود، به موضوع Node.js اختصاص یافت.
سامان بابلی، هم بنیانگذار و CTO (مدیر فنی) رایچت، و حامد قلی زاده، هم بنیانگذار و CIO (مدیر فناوری اطلاعات) رایچت، در این جلسه عهده دار ارائه مطالب در مورد Nodejs بودند. سامان بابلی در آغاز به معرفی و مفاهیم nodejs پرداخت و در ادامه حامد قلیزاده با اجرای پروژه، بصورت عملی استفاده و قابلیت های Nodejs را نمایش داد.
Node.js چیست ؟
Node.js نه یک زبان برنامه نویسی است، نه یک فریمورک. Node.js یک محیط است که به ما اجازه می دهد کدهای جاوااسکریپت رو در سمت سرور یا ماشین اجرا بکنیم. کدهای Node.js توسط موتور V8 گوگل به زبان ماشین تبدیل میشود.
چرا از Nodejs ؟
بطور عمده امروزه Node.js در مواردی که نیاز به پاسخ به حجم زیاد درخواست ها است، استفاده می٬شود.
دلیل استفاده فراوان از NodeJS، سریع بودن آن است که به لطف Non Bloking I/O و async بودن امکان پذیر شده است. برای درک بهتر این موضوع به یک مثال ساده Async میپردازیم. فرض کنید کارمندی در یک اداره برای تکمیل یک گزارش نیاز به دریافت اطلاعاتی از بازرس دارد. زمانی که این کارمند با بازرس تماس میگیرد و اطلاعات را از او درخواست میکند، بازرس در پاسخ میگوید که به نیم ساعت زمان برای تحویل اطلاعت نیاز دارد. کارمند تا زمان دریافت اطلاعات پشت خط می ماند و تلفن در طول مدت دریافت اطلاعات مشغول است (sync) اما اگر اطلاعات را از بازرس بخواهد و بخواهد بعد از آماده شدن با او تماس بگیرد، میتواند در این نیم ساعت کارهای دیگرش را انجام دهد و یا تماس های دیگری بگیرد و … و بعد از نیم ساعت بازرس تماس بگیرد و اطلاعات را به کارمند بدهد. همانطور که دیدید در اینجا چیزی بلاک نشد (async)
از بهترین ویژگیهای Node.js این است که میتوانید هم در سمت کلاینت(مرورگر) و هم در سمت سرور از یک زبان واحد به نام جاوااسکریپت استفاده کنید. پس زمان کمتری برای یادگیری نیاز خواهید داشت. همچنین برای راه اندازی MVP ها بسیار عالیست چرا که میتوانید نسخه مخصوص تمامی پلتفرمها را به کمک آنها راهاندازی کنید و زمان خیلی کمتری برای آمادهسازی آنها صرف کنید.
از برتری های دیگر نود جی اس، همراهی اکوسیستم بزرگ و فعال از برنامه نویسان است که تعداد بسیار زیادی ماژول، فریمورک و آموزش را برای Nodejs فراهم کردهاند. تمامی ماژول های ساخته شده در سایت npmjs قرار میگیرند. npm اختصار عبارت node package manager است.
هر پروژه دارای یک فایل Package.jason است که به عنوان “شناسنامه پروژه” از آن یاد میشود. در این فایل اطلاعات کلی در مورد پروژهی ما یعنی نام، ورژن، توضیحات و … نگه داری می شود، و همچنین دارای قسمتی است که نام و ورژن ماژولهای استفاده شده را ذخیره میکند تا در صورت اجرای پروژه توسط سایر اعضای تیم یا بر روی یک سیستم دیگر با اجرای دستور زیر بتوان تمام ماژول ها را نصب کرد.
$npm install
در ادامه سامان بابلی به معرفی چند ماژول پرکاربرد و معروف در npm پرداخت. ماژول هایی مانند: express, hapi, socket.io, redis, pm2
template Engine چیست؟
تمپلیت انجین ها امکانات و متفاوتی را ارائه میدهند و معمولا کار کردن با دیتاها در سمت view را برای ما راحتتر میکنند. به عنوان مثال تمپلیت انجین pug سینتکس کدهای html را برای ما سادهتر کرده و همچنین کار با دیتاها نیز آسان شده. از ویژگی های بارز این تمپلیت انجین ها پشتیبانی از حلقه ها و یا if هست. برای درک بهتر میتوانید به مثال درون اسلاید ها مراجعه کنید.
فریمورک های nodejs
express: یکی از معروف ترین فریمورک های nodejs است.
Koa: تیم توسعه دهنده express توسعه آن را بر عهده داشت و تمرکز بیشتری بر روی generator ها دارد.
sails js: بر پایه معماری MVC است و شبیه Ruby on rails هست.
hapi: فریمورک دیگری برای nodejs است که لول بالاتری نسبت به express و koa دارد و ساخت اپلیکیشن ها و سرویس ها را راحتتر کرده است.
ES6 ورژن ۲۰۱۵ از ECMAScript است. ECMAScript نام یک استاندارد است که جاوااسکریپت از آن پیروی میکند. هر ورژن جدید از ECMAScript دارای ویژگی های جدیدی است که تا امروز ورژن ES8 منتشر شده است اما آخرین نسخهای که توسط nodejs پشتیبانی میشود، ورژن ES6 است.
تفاوت web socket و http
در ارتباط از طریق پروتکل http در بازههای زمانی مرتب باید درخواست هایی از سمت کلاینت به سرور ارسال شود تا در صورت وجود دیتای جدید، آن را دریافت کند. اما در ارتباط از طریق پروتکل web socket یک ارتباط همیشگی بین کلاینت و سرور برقرار است که به ایونت ها گوش میدهند یا میتوانند ایونت ها را به یکدگیر ارسال کنند. به تصویر موجود در اسلاید مراجعه کنید.
از Nodejs استفاده نکنید اگر
در برنامه هایی که مصرف CPU بالا یا به عبارتی محاسبات زیادی دارند، مانند پردازش تصویر. همچنین بهتر است برای برگرداندن فایل های استاتیک به کاربراز nginx استفاده کنید و این کار را به Node.js نسپارید.
از nodejs استفاده کنید در
در اپ های Real Time مانند اپ های چت یا داشبورد هایی که نیاز به بروزرسانی و نمایش مداوم دیتای جدید به کاربر دارد nodejs انتخاب خوبی است. اپلیکیشن چت مثال خوبی برای Node.js هست چرا که حجم دیتای در حال انتقال و همچنین ترافیک زیادی دارد و نیازی به مصرف CPU ندارد. .
در ادامه ارائه سامان بابلی به موضوع load balancing در نود جی اس اشاره کرد. در یک جمله میتون لود بالانسینگ را تقسیم رکوست های ورودی به چند سرور تعریف کرد. برای درک بهتر این موضوع میتوانید مطلبی را که در Medium نوشته است را مطالعه کنید.
به عنوان موضوعات پایانی به معرفی شرکتهایی که از nodejs استفاده میکنند اشاره شد. مانند Uber که تقریبا به عنوان یکی از اولین و بزرگترین استفاده کننده های nodejs شناخته میشود، که در این لینک اطلاعات بیشتری در این مورد موجود هست. همچنین کسب و کار هایی مانند paypal، لینکدین، یاهو و … چندین مورد از این شرکت ها هستند.
برای دانلود اسلایدهای ارائه سامان بابلی اینجا کلیک کنید.
پس از پایان ارائه ی سامان بابلی، حامد قلیزاده مدیر فناوری اطلاعات رایچت مفاهیم نود جی اس را به صورت عملی برای حضار نشان داد.
قلیزاده ارائه خود را با مقدمهای از Nodejs آغاز کرد. ابتدا نحوه عملکرد Nodejs و ماژولهای Nodejs را به صورت عملی نشان داد. سپس کاربرد های فایل شناسنامه (package.json) را توضیح داد و سپس یک فایل شناسنامه ایجاد کرد. بعد از آن نحوهی کار با npm را توضیح داد و برای مثال ماژول lodash را نصب کرد و در یک پروژه از آن استفاده کرد.
او نحوه ساخت http سرور در نود جی اس را آموزش داد و با معرفی ماژول nodemon، که برای ریلود کردن پروسس نود بکار گرفته میشود، کار با فریمورک express را آفاز کرد. به کمک فریمورک اکسپرس یک وبسایت چند صفحهای با روتهای هوشمند ایجاد کرد که بعد از آن، برای جذابتر کردن وبسایت، صفحه ای به آن اضافه کرد که کاربران بتوانند به صورت real-time در آن چت کنند. او برای پیاده سازی این صفحه از ماژول socket.io استفاده کرد.
در آخر او با اشاره به پروتکل webSocket و نحوه عملکرد سوکت ها در نود جی اس، چت روم پرسرعتی را به کمک آن، پیاده سازی کرد.
او به این نکته نیز اشاره کرد که برای پایداری چت ها میتوان از دیتابیسهایی مانند مونگو دی بی استفاده کرد و یا با کش کردن چت ها میتوان از دیتابیس ردیس (که یک دیتابیس درون مموری هست) استفاده کرد. او قبلا ماژول رایکش را دراین حوزه توسعه و در دسترس عموم گذاشته است. در نهایت با معرفی و استفاده از پروسس منیجر pm2 و کاربرد های آن ارائه خود را پایان داد.
جلسات باز نرمافزاری یک رویداد پرمحتواست که با استقبال خوبی مواجه شده است. این رویداد که بدون حامی مالی برگزار میشود، برای ادامه فعالیت خود نیاز به تامین مخارج دارد. هزینههایی از قبیل تهیه صندلی، تهیه پذیرایی درخور مهمانان و… است. این هزینه ها از طریق فروش بلیط های حمایتی رویداد تامین میشود. البته برگزاری این رویداد رایگان بوده و رایگان خواهد ماند. این فرصت را غنیمت دانستم تا در حمایت از برگزار کنندگان اشاره کوچکی به این موضوع کنم. خیالتان تخت که یک ریالی هم از برگزاری این رویداد به جیب برگزارکنندگان نمیرود. تمام تلاش برگزار کنندگان افزایش سطح دانش فعالان استارتاپی و علاقمندان این حوزه است.