آیا Node.js را دوست داشته باشیم یا نه؟

آیا Node.js را دوست داشته باشیم یا نه؟

خیلی از توسعه دهندگان کامنت می دهند که چرا باید Node.js را یاد گرفت یا چه فرقی با دیگر زبان ها دارد! 🙄 البته تا جایی که توانستم پست هایی را در رابطه با Node آماده کرده ام که تا در حد امکان جواب این سوالات را به دست آوریم. خبر خوب برای آنهایی که تازه با Node آشنا شده اند این است که اگر قبلا JavaScript کار کرده باشند می توانند از همان سینتکس شیرین جاوا اسکریپت برای نوشتن برنامه های Node.js استفاده کنند، پس لازم نیست زبان جدیدی را یاد بگیریم. یکی از ویژگی های جذاب آن هم این است که با جاوا اسکریپت می توانیم مثل زبان های PHP کدهای سمت سرور بنویسیم و این خیلی خوبه!  😆

 

جاوا اسکریپت Node.js

 

Node.js در چند سال اخیر به تکنولوژی تبدیل شده است که بیشتر توسعه دهندگان به آن اعتیاد پیدا کرده اند. Node در این چند سال اخیر به یکی از داغترین تکنولوژی های دره سیلیکون ولی تبدیل شده است. پیشنهاد می کنم که اگر به برنامه نویسی مشغول هستید، سریال Silicon Valley را دنبال کنید. 😛

 

silicon-valley

 

در حال حاظر بیشتر کمپانی های بزرگ مثل Microsoft – Yahoo – Ebay – VMWare و بسیاری دیگر از کمپانی های در حوزه تکنولوژی از Node استفاده می کنند. یادگیری Node.js باعث می شود هر توسعه دهنده نرم افزاری فرصت شغلی شگفت انگیزی را به دست آورد.
شاید به احتمال زیاد درباره Node.js شنیده اید و مطالب بسیاری را در بابون و دیگر سایت ها دنبال کرده باشید، ولی شاید تنها این را شنیده باشید که تنها برای انجام دادن real-time یا برنامه های بسیار مقیاس پذیر کاربرد دارد. شاید این را هم شنیده باشید که Node.js جاوا اسکریپتی برای عملیات سمت سرور می باشد. (و شاید تعجب کنید که چرا کسی همچین چیزی را می خواهد!) یا شاید دقیقا ندانید که نود.جی اس چیست، یا اینکه مطمئن نیستید که چه موقع و چرا باید از آن استفاده کرد. نگران نباشید تنها به صندلی خود تکیه دهید تا من به شما همه چیز را توضیح دهیم. 😉

 

دنیای وب در حال تغییر است

امروزه وب به یک چیز مصرفی تبدیل شده است – مشاهده صفحات وب، تماشای فیلم، به دنبال تصاویری از گربه ها! اما وب بیشتر به یک ابزار تعامل تبدیل شده است تا مصرفی. کاربران در سراسر جهان می خواهند به تعامل با یکدیگر بپردازند، و این کار را می خواهند بصورت زمان واقعی (real-time) انجام دهند. چت، بازی کردن، وفادار به شبکه های اجتماعی، همکاری – هر کدام یک از این ویژگی ها نیازمند ارتباط کاربران و سرور های سراسر جهان با یکدیگر هستند. این ارتباط real-time وقتی رخ می دهد که نیاز باشد در یک مقیاس گسترده، پشتیبانی از صدها، هزاران و حتی میلیون کاربر صورت گیرد.

 

فریم ورک Node.js

وقتی سعی می کنم با یه فریم ورک جدید کار کنم!   😆

 

بنابراین مهندسان نرم افزار چه کاری را باید انجام دهند تا این اتفاق رخ دهد؟ ما نیاز به ارتباط real-time بین کلاینت ها و سرور ها داریم – به این معنی که نیاز به سرعت زیاد و ارتباط پایدار و مقاوم داریم. هر کسی که تجربه کافی با توسعه وب داشته باشد می داند که HTTP در ابتدا با این مورد در ذهن ساخته نشد. تعداد زیادی از کلاینت ها بطور مداوم و همزمان به سرور درخواست می دهند که باعث کند شدن فوق العاده سرعت و ناکارآمد شدن آن می شود. برای اینکه بتوانیم ارتباط real-time را در مقیاس بزرگ ایجاد کنیم، سرور ها نیاز دارند تا اطلاعات را طوری به کلاینت انتقال دهند که از مدل کند request/response در HTTP استفاده نشده باشد. ما همچنین باید مطمئن شویم این انتقال سبک که عملیات ارتباط را به عهده دارد مقیاس پذیر، قابل استفاده از نقطه نظر توسعه نرم افزار است.

 

ورود Node.js

 

Node.js یک رویداد محور (event-driven) و جاوا اسکریپت سمت سرور می باشد. Node جاوا اسکریپت را با استفاده از موتور V8 که توسط Google توسه داده شده است اجرا می کند، V8 همان موتوری که Chrome برای نمایش صفحات خود در مرورگر وب خود استفاده می کند! قدرت و جادوی V8 به Node این اجازه را می دهد یک محیط توسعه سمت سرور runtime که کدهای جاوا اسکریپت را مثل رعد و برق اجرا می کند ارائه دهد. افزایش این سرعت فوق العاده باعث شده که V8 جاوا اسکریپت را به جای تفسیر یا اجرای آن به عنوان بایت کد، مستقیما به زبان ماشین کامپایل کند. Node منبع باز و کراس پلتفرم، است و در تمام سیستم عامل ها مثل Mac OSX، Windows و Linux قابل اجرا است.

 

اما جاوا اسکریپت؟ سمت سرور؟ چرا؟ اگرچه JavaScript به طور سنتی نقش مهمی را در انجام وظایف در مرورگر های وب ایفا می کند، اما در واقع یک زبان برنامه نویسی کاملا کاربردی است، قادر به انجام هر چیزی که در زبانی های سنتی مثل C++، Ruby یا Java رخ می دهد است. علاوه بر این، جاوا اسکریپت یک مدل بسیار ایده آل برای برنامه نویسی ناهمگام (asynchronous) است. جاوا اسکریپت همچنین به یک زبان همه جا حاظر تبدیل شده است، ما می دانیم که میلیون ها دولوپر از آن استفاده می کنند. این باعث کاهش یادگیری Node.js می شود، چرا که بیشتر دولوپرها نمی خواهند زبان جدیدی برای ساخت برنامه های Node.js شروع کنند، تنها کافیست که جاوا اسکریپت را به خوبی درک کرده باشید تا ببینید که توسعه نرم افزار برای Node.js چقدر لذت بخش است.  😈

 

مقایسه زبان های برنامه نویسی

 

برنامه نویسی ناهمگام آسانترین راه است

 

علاوه بر اجرای سریع جاوا اسکریپت، سحر و جادوی واقعی پشت نود.جیاس به نام رویداد حلقه (Event-Loop) شناخته شده است. برای اینکه حجم زیادی از کلاینت ها را برای عملیات I/O در Node.js سازماندهی کند با استفاده از ناهمگام (asynchronous) انجام شده است. روش سنتی ریسمان برای کدهای asynchronous بسیار سنگین است و باعث مصرف حافظه زیاد برای حجم عظیمی از کلاینت ها می شود (هر کلاینت باعث تولید یک ریسمان یا thread می شود، و حافظه زیادی مصرف می شود). برای جلوگیری از این ناکارآمدی، و همچنین مشکل در برنامه نویسی برنامه های ریسمانی، Node.js مدعی است که با استفاده از یک event loop تمام عملیات ناهمزمان را برای شما مدیریت می کند.

 

 

Node.js یاد بگیریم

 

هنگامی که برنامه Node نیاز به انجام یک عملیات blocking دارد  (عملیات I/O محاسبات سنگینی را انجام می دهند) یک وظیفه asynchronous همراه با یک تابع callback به event-loop ارسال می کند و پس از آن بقیه برنامه را اجرا می کند. حلقه رویداد یا event-loop آهنگ این عملیات asynchronous را نگاه می دارد و آنگاه callback داده شده را پس از اتمام اجرا می کند و نتیجه را به برنامه برگشت می دهد. این به شما اجازه می دهد تا تعداد زیادی از عملیات را مثل اتصالات کلاینت ها یا محاسبات را مدیریت کنید. البته، واگذاری این مسئولیت به حلقه رویداد زندگی را برای توسعه دهندگان Node.js آسان کرده است که می توانند بر روی بخش های اصلی برنامه خود متمرکز شوند.

چرا Node.js یاد بگیریم

این قابلیت به سادگی برنامه نویسی asynchronous با Node.js را به یک ابزار قدرتمند برای برنامه نویسان کرده است. با استفاده از Node می توانید برنامه هایی پیچیده درست کنید که بتواند به میلیون ها نفر از اتصالات کلاینت ها را در مقیاس بزرگ رسیدگی و در حلقه رویداد محاسبه کند.

 

علاوه بر این ویژگی ها، Node.js شامل یک کامنیوتی بزرگ و رو به رشد است که شامل بسیاری ماژول است که قابلیت های Node را افزایش داده است. یکی از این ماژول های معروف Socket.io است که وظیفه آن مدیریت اتصالات بین کلاینت و سرور است، قادر می سازد سرور بطور real-time به روزرسانی را به کلاینت نمایش دهد. این فن آوری اجازه می دهد تا شما برنامه های real-time را به سادگی در کمترین زمان ممکن با کد کمتر ایجاد کنید.

 

اگر با Node.js آشنا هستید و دوست دارید با Socket.io کار کنید پیشنهاد می کنم نوشتن یک اپ چت با Socket.IO یا آموزش Socket.IO با io.js و Express را مطالعه کنید. و اگر تازه کار هستید مقدمه مختصر برای Node.js و راهنمای NODE.JS برای تازه کارها را مطالعه کنید و همچنین برای مقایسه PHP با Node.js پیشنهاد می کنم PHP یا Node.js ؟ مساله این است! را مطالعه کنید. البته به نظر من زبان ها را با مقایسه همدیگر نمی شود شناخت چون همانطور که می دانیم باید تشخیص دهیم در کجا و چه زمانی از چه زبانی استفاده کنیم. همچنین با استفاده از کتاب Node.js By Example می توانید عمق بیشتری از Node را کشف کنید.

 

آموزش برنامه نویسی Node.js

 

به هر حال تمام این مقالاتی که در رابطه با Node.js آماده می شود تنها بخشی از کار است، و تصمیم گیرنده اصلی شما هستید که آیا می خواهید با Node.js یا دیگر تکنولوژی های جدید کار کنید یا نه! مطمئن هستم شما هم مثل من وسوسه کار با Node.js می شود پس زمان را هدر ندهید و از همین حالا شروع به یادگیری آن کنید که Node و شما آینده درخشانی خواهید داشت. 😉 . امیدوارم که جواب بسیاری از سوالات خود را به دست آورده باشید، توجه داشته باشید که تنها شما هستید که باید با جستجو در وب سایت ها با این تکنولوژی باحال آشنا شوید. 😉

آه داشت یادم میرفت یکی از سایت هایی که می تواند شما را با Node آشنا سازد nodeschool.io است.