درباره نود جی اس ( Nodejs )

تاریخ انتشار:

nodejs چیست؟

nodejs پلتفرمی بر مبنای موتور جاوا اسکریپت V8 کروم است که به منظور طراحی اپلیکیشن های سریع و مقیاس پذیر ساخته شده. node.js از مدل رویدادگرا ( event-driven ) و non-blocking برای انجام عملیات I/O بهره میگیره و از این‌ جهت نود جی اس یک پلتفرم سبک و کارا برای طراحی سایت و پیاده سازی برنامه های Real-time و مبتنی بر داده است که می تواند به راحتی در سرورهای غیر متمرکز اجرا شود. همانطور که می‌دانیم جاوا اسکریپت یک زبان اسکریپت نویسی سمت کاربر یا Client-Side است به این معنی که می تواند در مرورگر کاربر اجرا شود حال با این تعریف می توانیم بگوییم که nodejs به عنوان یک رابط می تواند جاوا اسکریپت را بر روی سرور اجرا کند.

نود جی اس ( Node.js )

مشکلات راه کارهای طراحی اپلیکیشن

زمانی که شما از دیگر زبان های برنامه نویسی مثل PHP استفاده می کنید وبسرورهای شما apache یا nginx است و معمولا وبسرورها اینجوری کار می‌کنند که به ازای هر کانکشن یک thread جدید می سازند و این thread تا زمانی که کانکشن مربوطه باز باشه باقی می‌مونه. این کار بار پردازشی و مصرف مموری اضافی برای هر کانکشن ایجاد می‌کند و به عبارتی باعث میشه تعداد کلاینت هایی که یک وبسرور همزمان میتونه پاسخگو باشه محدود باشه عددی که به 10 هزار نمیرسه. برای همین این مشکل با نام «مسئله 10 هزار کانکشن همزمان» یا C10K معروفه. البته این مسئله‌ی جدیدی نیست. بحث سر این مسئله و راهکارهای موجود از سال‌ها پیش وجود داشته. وبسرورهای جدید نظیر nginx و lighttpd این مشکل رو حل کردند. و البته node.js هم با توجه به هدف اولیه ای که داشته جزو اون دسته از وبسروهایی محسوب میشه که این مشکل رو نداره.

مشکل از اونجایی ناشی میشه که دریافت، پردازش و پاسخ دادن به یک درخواست از یک کلاینت اونقدر طول میکشه که نمیشه برای دریافت کانکشن بعدی منتظر اتمام کار کانکشن قبلی موند. بنابراین وبسرورها برای پاسخ به کلاینت جدید یک thread جدید ایجاد می‌کردند. مسئله اینجاست که پردازنده ها به اندازه کافی سریع هستند و اون چیزی که باعث کند شدن این روند میشه I/O هست. یعنی عملیات ورودی و خروجی، چه از شبکه و چه از سیستم فایل. حال در نود جی اس برای رفع این مشکل به جای اینکه عملیات ورودی/خروجی مستقیما انجام بشه از معماری رویداد گرا برای پیاده سازی IO استفاده میشه. به عبارتی به جای اینکه منتظر نتیجه IO بمونیم یک رویداد برای دریافت نتیجه تعریف می‌کنیم و اجرای برنامه ادامه پیدا میکنه. به این ترتیب عملیات های ورودی/خروجی باعث بلاک شدن اجرای برنامه نمیشه و node هم با همین معماری نوشته شده.

چرا من باید از nodejs استفاده کنم؟

اگر تجربه کار جاوا اسکریپت دارید پس حتما می دانید که جاوا اسکریپت یک زبان مبتنی بر رویداد یا event است. یعنی هر چیزی که اتفاق می افتد می تواند خود یک رویداد باشد. به عنوان مثال ورود و خروج به سیستم توسط کاربر، آپلود فایل، درخواست نوشتن یا حذف فایل در پایگاه داده و غیره. تمام اینها به هنگام کار با جاوا اسکریپت به عنوان رویداد ثبت می شوند. حال اینجاست که node.js وارد می شود و وظیفه آن درست مثل سرور است، به شیوه ای که بسیار شبیه به آپاچی یا nginx عمل می کند. nodejs تفسیر کد برنامه را اجرا و متوقف می کند با این حال بر خلاف بسیاری از اسکریپت های سمت سرور دیگر که یک تابع برای اجرا شدن نیاز دارد در صف قرار گیرد تا دیگر توابع اجرا شوند، node.js به این صورت عمل نمی کند، نود این اجازه را می دهد که توابع بصورت ناهمگام یا asynchronous اجرا شوند، به این معنی که همه چیز با هم در پس زمینه اجرا می شود. در نتیجه برنامه سریعتر، پایدارتر و مقیاس پذیر تر می شود. تصور کنید که یک برنامه PHP مسئولیت رسیدگی همزمان به چندین داده برای دستکاری را دارد Node می تواند همه آنها را با کیفیت بهتر و شیوه سریع تر انجام دهد.

معایب نود جی اس ؟

nodejs هم معایب خاص خودش را دارد. به عبارت ساده تر بزرگترین نقطه ضعف این است که هنوز nodejs نسبتا جدید است و در واقع هنوز مراحل ابتدایی خود را پشت سر می گذارد. در حالی که شما برای کار با Node می توانید آن را بر روی سرور یا VPS خود قرار دهید اما هنوز به آسانی در تمام پلتفرم ها موجود نیست، به خصوص وقتی که موضوع بودجه و استفاده از هاست اشتراکی مطرح است. بیشترهاست‌های اشتراکی هنوز پشتیبانی از node.js را به پلتفرم خود اضافه نکرده اند. در حال حاضر بسیاری از برنامه های تحت وب از LAMP استفاده می کنند، پس شاید زمان مناسب برای استفاده از node.js نیست. اما همانطو که گفتم تمام این مسائل زود گذر هستند چرا که nodejs دستاوردهای زیادی دارد و همین باعث محبوبیتش شده است، مطمئن باشید به زودی با گذر زمان امکان پشتیبانی از آن در مقیاس بزرگتری میسر خواهد شد و درست مثل رقبای خود سهم عادلانه ای از اینترنت خواهد داشت.

منابع آموزشی برای یادگیری nodejs

  • یکی از منابع خوب درباره نود جی اس مستندات رسمی nodejs است که پیشنهاد می کنم برای آشنایی بیشتر مستندات آن را مطالعه کنید
  • یکی دیگر از خود آموزهایی که وجود دارد nodeschool.io است که کارگاه های آموزشی فراهم می کند و به خوبی شما را با دنیای Node آشنا می سازد
  • در سایت بابون هم میتونید مطالب مفیدی برای کار با nodejs به زبان فارسی پیدا کنید

خلاصه

شما به احتمال زیاد دانش کافی کار با HTML و CSS رو دارید و در PHP هم ماهر هستید و احتمالا تجربه کار با جاوا اسکریپت را هم دارید. تمام اینها مهارت هایی هستند که امروزه یک توسعه دهنده و طراح وب سایت مدرن به آنها نیاز دارد تا بتواند وب سایت‌های قدرتمند طراحی کند. چرا مهارت های خود را با یادگیری چیزی های کاملا جدید به سطح بالاتر انتقال نمی دهید؟ با این حال تجربه کار جاوا اسکریپت هم که دارید پس فرصت خوبیست که چیزی شبیه به node.js را یاد بگیرید. اگر می خواهید مهارت های طراحی سایت خود را افزایش دهید پس بهتر است آموزش node.js را در نظر بگیرید. نود یکی از ترند‌های طراحی سایت است که در حال حاضر همه درباره آن صحبت می کنند و شما نیز نباید از این مسیر دور بمانید.

 

6 دیدگاه برای ”درباره نود جی اس ( Nodejs )

  1. شهاب

    سلام
    می تونیم با node و php به صورت ترکیبی تو یک پروژه کار کنیم؟
    این کارا رو میشه تو یه سرور انجام داد؟
    میشه همزمان با یه دیتابیس کار کنیم؟
    برا قسمت چت یک سایت که با php نوشته شده روش پیشنهادیتون چیه؟
    از نظر تهیه سرور node.js و کانفیگش تو ایران چجوری اقدام کنم؟
    ببخشید سوالات زیاد شدن !

    1. زاره آوانسیان

      سلام
      بله کلیه کارها رو میشه انجام داد
      برای سرور هم یه vps باید بخرین و nodejs روش نصب کنید

      1. شهاب

        ببخشید یعنی استفاده ترکیبی با php و node.js روی یه سرور ؟
        میشه؟

        1. زاره آوانسیان

          بله چرا نمیشه. شما وقتی روی کامپیوتر خودتون LAMP یا XAMP نصب میکنی و PHP استفاده میکنی بعدش خیلی راحت روی همون سیستم میتونی nodejs نصب کنی. سرور هم همینه فقط اونجا شاید لینوکس باشه و نصب کردنش یه جور دیگه اما در کل مشکلی نداره. تنها اختلالی که میتونه باشه اینه که هر دو نمیتونن هم زمان از پورت ۸۰ که برای وب هستش استفاده کنن

  2. سامان

    سلام خسته نباشید. من ایدی تلگرام میخوام واسه یک پروژه کوچیک ممنون میشم کمکم کنید.

  3. علی کریمی

    سلام میخواستم یک شبکه اجتماعی برای اندروید بسازم به نظرتون از nodejs استفاده کنم؟خیلیا گفتن به درد اندروید نمیخوره و سرعتش هم کمه و سرور رو سینگین میکنه نظر شما چیه؟

دیدگاه خود را ارسال کنید

نشانی ایمیل شما منتشر نخواهد شد.