جاوا اسکریپت محبوب ترین زبان برنامه نویسی همچنین یکی از جهانی ترین فناوری های توسعه نرم افزار در سرتا سر جهان است.از آن به طور معمول به عنوان یک ابزار توسعه برای وب استفاده می شود . همچنین این زبان تبدیل به یک ابزار قدرتمند در حوزه توسعه برنامه های موبایل بر روی پلتفورم های مختلف مانند Apache Cordova/PhoneGap. React Native. NativeScript, Appcelerator Titanium شده است.
اما زمینه های کاربرد JavaScript به همین جا ختم نمی شود. اخیراً ، در مورد استفاده از JavaScript برای برنامه نویسی سمت سرور(server-side) ، سروصدای زیادی به پا شده است. یکی از ابزارهایی که نشانگر این تغییر در توسعه وب بود ، Node.js است.
برای یادگیری JavaScript اینجا کلیک کنید.
برای یادگیری Node.js اینجا کلیک کنید.
Node.js در واقع یک فریم ورک یا کتابخانه نیست . بلکه یکruntime environment است که بر اساس موتور جاوا اسکریپت V8 کروم ساخته شده است.
این فناوری اولین بار در سال 2009 توسط رایان دال در کنفرانس سالانه JSConf اروپا معرفی شد و بلافاصله به عنوان .” جالبترین و محبوب ترین قطعه نرم افزار در جهان فعلی JavaScript “. شناخته شد.
به عنوان یک پروژه منبع باز ، Node.js توسط Joyent ، ارائه دهنده راه حل های رایانش ابری و خدمات هاستیگ، حمایت مالی شد. این شرکت در تعدادی از فناوری های دیگر نیز مانند فریم ورک Ruby on Rails سرمایه گذاری کرد و خدمات هاستیگ به توییتر و LinkedIn ارائه کرد. شرکت نام برده همچنین به یکی از اولین شرکت هایی تبدیل شد که از Node.js برای برنامه کاربردی تلفن همراه خود استفاده کرد . این فناوری بعداً توسط تعدادی از رهبران فن آوری جهان مانند Uber ، eBay ، Walmart و Netflix به تصویب رسید .این ها فقط تعداد اندکی از اسامی بزرگی هستند که اینجا می آوریم.
با این حال ، علاقه به این فناوری طبق آمار Google Trends در سال 2017 به اوج خود رسید و همچنان رو به فزونی است.
پشتیبانی بلند مدت و آخرین نسخه های Node.js را برای Windows و MacOS از اینجا نصب کنید . همچنین ، یک نکته را به خاطر داشته باشید – npm با Node.js همراه یکدیگر توزیع می شود.
اسناد و راهنماهای شروع را در از اینجا مطالعه کنید و کامل دریابید که Node.js چیست؟ .
تقریباً هر ویرایشگر محبوب کد دارای پشتیبانی و پلاگین هایی برای JavaScript و Node.js است ، بنابراین فقط نحوه سفارشی سازی IDE خود با توجه به نیازهای کدنویسیتان مهم است. اما ، بسیاری از توسعه دهندگان از ابزارهای ویژه VS Code ، Brackets ، Atom و WebStorm بسیار تعریف می کنند .
استفاده از میان افزار بر روی Node.js یک روش رایج است که زندگی توسعه دهندگان را بسیار آسانتر می کند. از جمله این فریم ورک ها می توان به Express.js ، Meteor ، Sales.js ، Koa.js ، Keystone.js و Loopback.js اشاره کرد.
جال که در مورد مورد اینکه Node.js چیست به اختصار صحبت کردیم می رسیم به .نقاط قوت و ضعف Node.j که یکی از مباحث جذاب و داغ همیشگی است.برای رعایت حق انصاف ، ما هر دو مورد را مورد تجزیه و تحلیل قرار داده ایم .مزایا و معایب Node.js . و در تلاش برای این سوال که Node.js در چه پروژه هایی بیشتر به کار می آید به این نتایج رسیدیم.
جاوا اسکریپت ثابت کرده است که در بین محبوب ترین زبان های برنامه نویسی یک رهبر بلامنازع است. به نوبه خود ، Node.js به یک نام مستقل در صنعت تبدیل شده است. با مجموع 368،985،988 دانلود و بیش از 750 مشارکت کننده جدید همانطور که در گزارش node by number در سال 2018 آمده ، به نظر می رسد این پروژه از همیشه قوی تر است.( آمار امروز مطمعنا از این اعداد بسیار بالاتر است)
با استفاده از Node.js برای backend ، به طور خودکار تمام مزایای توسعه full stack جاوا اسکریپت را خواهید برد از جمله:
در نتیجه ، تیم شما بسیار انعطاف پذیر تر می شود. توسعه زمان بسیار کمتری می برد . در نتیجه ، شما یک نرم افزار سریع و قابل اعتماد خواهید ساخت. توسعه دهندگان آموزش دیده در front-end جاوا اسکریپت می توانند با کمترین تلاش برنامه نویسی سمت سرور را شروع کنند. با زبان یکسان در هر دو طرف ، می توانید با قرار دادن آن در ماژول ها و ایجاد سطوح جدیدی از انتزاع ، از کد هم در frontend و هم backend استفاده مجدد کنید.
بر خلاف یک باور مشترک ، به عنوان یک stack developer ، به هیچ وجه محدود به پشته MEAN .(MongoDB ، Express.js ، AngularJS و Node.js) .نیستید. تنها موردی که در این لیست ضروری است Node.js است. (در JavaScript هیچ گزینه دیگری برای برنامه نویسی backend وجود ندارد). بقیه فناوری های موجود در این پشته اختیاری هستند و ممکن است با برخی دیگر از ابزارهای ارائه دهنده عملکرد مشابه جایگزین شوند.
Node.js سریع است. این بر کسی پوشیده نیست با نگاهی به مقایسه چگونگی پاسخ به درخواست های همزمان در GO ، PHP ، Java و Node.js ، در این سایت به این نتیجه می رسیم که node سریع است (سریع نه سریع ترین) . چند دلیل برای این نتایج وجود دارد:
موتور مورد استفاده در پیاده سازی Node.js در اصل برای مرورگر Chrome ساخته شده است. Chrome +8 که به زبان++C نوشته شده است ، برای کمپایل توابع نوشته شده در JavaScript به کد ماشین استفاده می شود و کار را با سرعتی قابل توجه انجام می دهد. فقط معیارهای عملکرد را در وبلاگ V8 بررسی کنید . به لطف سرمایه گذاری هنگفت گوگل در موتور خود ، V8 هر ساله بهبود عملکرد را نشان می دهد .در نتیجه Node.js از کل مزایای آن استفاده می کند.
این ها باعث شده Node.js قادر به پردازش درخواست ها بدون تأخیر باشد. در زمینه backend ، پردازش همزمان فرض می کند که کد در یک توالی اجرا می شود. بنابراین ، هر درخواست یک thread را مسدود می کند .و درخواست های دیگر را در انتظار می گذارد تا task پایان یابد. پردازش ناهمزمان اجازه می دهد تا درخواست ها بدون مسدود کردن.( ورودی و خروجی non-blocking I/O). thread پردازش شوند. بنابراین پس از پردازش درخواست ، می تواند پاسخ را برگردانده و به ادامه پردازش درخواست ها ادامه دهد. این به Node.js کمک می کند تا از تک thread حداکثر استفاده را ببرد . در نتیجه زمان پاسخ کوتاه و پردازشها همزمان است.
جنبه دیگر مدل مبتنی بر رویداد است . هنگام استفاده از یک زبان مشترک برای هر دو سرویس گیرنده / سمت سرور ، همگام سازی بسیار سریع اتفاق می افتد . که به خصوص برای برنامه های مبتنی بر رویداد و در زمان آنی بسیار مفید است. Node.js به دلیل ماهیت ناهمگام ، غیر مسدود کننده و تک thread ای ، یک گزینه محبوب برای بازی های آنلاین . چت ها . کنفرانس های ویدیویی یا هر راه حلی است که نیاز به داده های مداوم به روز دارد.
مثالها خود بازگوی این حقیقت هستند: بسیاری از شرکتهای برجسته فناوری رویه را به توسعه برنامه های Node.js تغییر داده و پیشرفتهای چشمگیری را مشاهده کردند – به عنوان مثال PayPal از زمان مهاجرت از جاوا ، متوجه کاهش 35 درصدی زمان پاسخ دهی شده است.
از آنجا که این تکنولوژی یک ابزار سبک است ، استفاده از Node.js برای معماری ریز خدمات یک انتخاب عالی است. این سبک معماری توسط مارتین فاولر و جیمز لوئیس به بهترین شکل توصیف شده است: ” رویکردی برای توسعه یک برنامه واحدبا مجموعه ای از خدمات کوچک ، هر کدام در پروسه خود اجرا می شوند و با مکانیسم های سبک ارتباط برقرار می کنند . “
بر این اساس ، با شکستن منطق برنامه به ماژول های کوچکتر ، ریز خدمات ، به جای ایجاد یک هسته یکپارچه بزرگ ، انعطاف پذیری بهتری را ایجاد می کنید و زمینه را برای رشد بیشتر فراهم می کنند. در نتیجه ، افزودن ریز خدمات در بالای سرویس های موجود در برنامه بسیار ساده تر از کارگذاری ویژگی های اضافی در عملکرد اصلی برنامه است.
نود مطابق گزارش Node.js User Survey Report 2017 بهترین فناوری انتخابی هنگام ساخت و استقرار راه حل های اکوسیستم ریز سرویس ها است. تقریباً نیمی از پاسخ دهندگان از فناوری های مربوط به ریز خدمات .(به خصوص Docker ، پیشروترین پلت فرم کانتیر بندی نرم افزار). برای ساخت برنامه های وب Node.js استفاده می کنند :
یافته های اخیر نشان می دهد که فناوری های مرتبط با ریز سرویس مانند Docker و Kubernetes در سال 2018 رشد قابل توجهی را در استفاده تجربه کرده اند. با ارتباط هر میکرو سرویس با پایگاه داده به طور مستقیم از طریق جریان ها ، امکان عملکرد بهتر و سرعت بسیار بالاتر فراهم می شود.
به عنوان مثال ، تغییر Walmart به معماری ریز خدمات با Node.js منجر به مزایای زیر شد :
صد در صد Up time (بدون قطعی) در روز در جمعه سیاه (مدیریت بیش از 500 میلیون بازدید صفحه)
صرفه جویی تا 40 درصد در سخت افزار و 20-50 درصد در کل عملیات.
نمونه بارز دیگری از اینکه Node.js می تواند از نظر عملکرد بهتر از رقبا عمل کند ، مورد GoDaddy است . با اجرای کمپین تبلیغاتی SuperBowl ، این شرکت توانست به لطف Node.js فقط با استفاده از 10 درصد سخت افزار خود بیش از 10.000 request را در ثانیه بدون قطعی مدیریت کند.
یک کلمه – npm ،پکیج مدیریت بسته پیش فرض Node.js ، که همچنین به عنوان بازاری از ابزارهای منبع باز جاوا اسکریپت عمل می کند . و نقش مهمی در پیشرفت این فناوری دارد. با حدود 836،000 کتابخانه موجود در رجیستری npm در حال حاضر ، و بیش از 10،000 کتابخانه جدید که هر هفته منتشر می شود ، اکوسیستم Node.js بسیار غنی است. همین آمار نشان می دهد که 97 درصد برنامه های وب مدرن از ماژول های npm تشکیل شده است. و این اثبات محبوبیت غیر قابل انکار آن در بین توسعه دهندگان است.
با چنین تنوع گسترده ای از ابزارهای رایگان که تنها با چند کلیک قابل دسترس اند . پتانسیل زیادی برای استفاده از Node.js وجود دارد. در عین حال ، نرم افزارهای منبع آزاد از محبوبیت روزافزونی برخوردار هستند زیرا به شما امکان می دهند راه حل های جدیدی را ارایه دهید .که هزینه های کلی توسعه و زمان ورود به بازار را کاهش می دهد.
همانطور که در بالا ذکر شد ، توسعه Node.js توسط Joyent پشتیبانی شد. در سال 2015 ، بنیاد Node.js برای .” آسان کردن پذیرش گسترده آن و کمک به تسریع در توسعه Node.js “. ایجاد شد. ”IBM ، Microsoft ، PayPal ، Fidelity و SAP اعضای بنیانگذار این سازمان شدند.
لیست سازمانهایی که از Node.js در تولید استفاده می کنند به طور مداوم در حال رشد است. در حال حاضر تقریباً سیصد شرکت شناخته شده از جملهPayPal ، Medium ، Trello ، Uber و Zendesk را شامل می شود.
تعداد بسیار کمی از پروژه های منبع باز از چنین پشتیبانی قوی از شرکت های برجسته جهان برخوردار بوده اند. و این خود از پتانسیل بالای Node.js سخن می گوید.
اگرچه سایر فناوری های backend مانند PHP و Ruby on Rails می توانند از فرمت JSON برای برقراری ارتباط استفاده کنند . Node.js این کار را بدون تبدیل بین مدل های باینری انجام می دهد و از JavaScript استفاده می کند. این به ویژه در مواردی که شما نیاز به ایجاد RESTful API برای پشتیبانی از پایگاه داده NoSQL دارید ، مانند MongoDB . (حرف M در پشته MEAN) .بسیار مفید است. این ارتباط یکپارچه با یکی از اصلی ترین استانداردهای انتقال داده از دیگر مزایای اکوسیستم جاوا اسکریپت است که Node.js از آن بهره می برد.
بزرگترین نقص Node.js حتی در حال حاضر عدم توانایی پردازش وظایف متصل به پردازنده است. اما ، برای درک اینکه ریشه های این موضوع چیست ، ما به کمی پیش زمینه نیاز داریم. بیایید با اصول اولیه خود JavaScript شروع کنیم.
همانطور که می دانیم ، Node.js یکruntime environment است که JavaScript را در سمت سرور اجرا می کند. جاوا اسکریپت به عنوان یک زبان برنامه نویسی frontend ، از یک thread برای پردازش سریع task ها استفاده می کند. برای اجرا نیازی به Threading نیست ، زیرا task های موجود در JavaScript سبک هستند و بار کمی روی پردازنده می گذارند.
با بازگشت به Node.js ، اکنون می دانیم که چرا این موضوع تک Thread در نظر گرفته می شود: زیرا JavaScript را که تک رشته ای(single thread)است پردازش می کند.
مشکل زمانی اتفاق می افتد که Node.js یک وظیفه متصل به پردازنده را دریافت می کند.هر زمان که یک درخواست سنگین به حلقه رویداد(event loop) می آید ، Node.js تمام قدرت پردازنده موجود را تنظیم می کند تا ابتدا آن را پردازش کند . و سپس به سایر درخواست های در صف پاسخ دهد. این امر منجر به پردازش کند و تاخیر کلی در حلقه رویداد می شود . به همین دلیل Node.js برای محاسبات سنگین توصیه نمی شود.
با این حال ، در سال 2018 ، multithreading در Node.js به عنوان یک ویژگی آزمایشی با به روزرسانی 10.5.0 معرفی شد .از ویژگی جدیدی به نام worker threads می توان برای استفاده از رشته های اضافی از thread pool ، برای انجام وظایف متصل به پردازنده استفاده کرد. اما این کار فقط در ماشین های دارای چندین هسته قابل انجام است . زیرا Node.js به شما امکان استفاده از یک هسته برای یک thread را می دهد. این بدان معناست که پردازش های سنگین موازی را می توان روی یک رشته دیگر اجرا کرد. این ویژگی در نسخه 12 Node.js همچنان آزمایشی است اما به طور قابل توجهی بهبود یافته است.(در زمان نوشتن این مقاله بهبود بیشتری نیز یافته ورژن 16.3.0)
Node.js به دلیل ماهیت asynchronous خود ، به شدت به callbacks متکی است . function هایی که بعد از پایان هر کار در صف اجرا می شوند. نگه داشتن تعدادی Task در صف پس زمینه ، هرکدام با callback خود ، می تواند منجر به مشکلی به نام callback hell شود ، که به طور مستقیم بر کیفیت کد تأثیر می گذارد. به عبارتی ساده ، این ” .وضعیتی است که callback در چندین callback دیگر در چندین سطح عمیق قرار می گیرد .و به طور بالقوه درک و حفظ کد را دشوار می کند. “
با این حال ، این اغلب نشانه ضعف در برنامه نویسی و عدم تجربه به ویژه با JavaScript و Node.js تلقی می شود. همانطور که در callbackhell.com نشان داده شده است ، کدی که در بالا نشان داده شده است ، فقط در چند مرحله قابل ویرایش و ساده سازی است .
گرچه ماژول های اصلی Node.js کاملاً پایدار هستند و می توان آنها را بالغ دانست. اما ابزارهای زیادی در رجیستری npm وجود دارد که یا از کیفیت پایینی برخوردارند و یا به درستی مستند و آزمایش نشده اند. علاوه بر این ، رجیستری به اندازه کافی ساختار درستی ندارد تا بتواند ابزارها را بر اساس رتبه بندی یا کیفیت آنها ارائه دهد. از این رو ممکن است یافتن بهترین راه حل برای اهداف خود بدون اینکه بدانید به دنبال چه چیزی بگردید دشوار باشد .
این مورد که اکوسیستم Node.js عمدتا منبع باز است ، تأثیر خود را نیز دارد. در حالی که کیفیت فناوری اصلی Node.js توسط Joyent و سایر عوامل اصلی تامین می شود . ممکن است بقیه ابزارها فاقد کیفیت و استانداردهای لازم کدنویسی تعیین شده توسط سازمان های جهانی باشند.
بر خلاف این باور مشترک ، همه توسعه دهندگان JavaScript توسعه دهنده Node.js نیستند. تسلط بر برنامه نویسی جاوا اسکریپت در سمت سرور به تلاشی قابل توجه و پیشینه خاص در توسعه backend نیاز دارد. به دلیل سختی زیاد این پروسه، تعداد مهندسان Node.js به طور قابل توجهی کمتر از تعداد کل متخصصان JS است.
با ادامه رشد سر زبان افتادن نام Node.js ، تقاضا برای متخصصان باتجربه در این زمینه نیر افزایش می یابد.
بنابراین ، با وجود میلیون ها توسعه دهنده جاوا اسکریپت ، یافتن یک متخصص Node.js ماهر برای پروژه کاری دشوار است. در این حالت ، مطمئناً نمی خواهید جستجوی خود را فقط به یک کشور محدود کنید. یافتن استعداد های غیر بودمی در حوزه IT این روز ها به یک امر نرمال تبدیل شده.
فناوری های زیادی وجود ندارد که بتواند با محبوبیت Node.js یا تقاضای بازار آن رقابت کند. با این حال ، اگر به گزینه های برنامه نویسی سمت سرور نگاه کنیم . حداقل سه ستاره درخشان دیگر را در آسمان می بینیم. این ها Ruby on Rails ، Django و Symfony است. بیایید ببینیم که آیا آنها هم مزایای Node.js را دارند . آیا اشکالات آن را به همراه دارند یا خیر.
به زبانی ساده اما قوی و به خاطر در دسترس بودن Gem ها.(اکوسیستم سفارشی بسته های اختصاصی Rails. ). مشهور است . Ruby خود یک زبان بصری و مبتدی پسند است که دارای جامعه ای حامی و اختصاصی است که خدماتشان را به RubyGems ارایه می دهند. Rails برای توسعه سریع و نمونه سازی ایجاد شده است . اگرچه توسط شرکت هایی مانند GitHub ، Twitter و Airbnb با موفقیت مورد استفاده قرار می گیرد و دامنه گسترده ای از موارد استفاده خود را ثابت می کند.اما قابلیت انتقال داده آن بسیار چشمگیر است . برخلاف Node.js ، که از بسته های اضافی استفاده می کند ، Rails از قبل دارای یک ویژگی است که به شما امکان می دهد به راحتی و به طور ثابت پایگاه داده خود را دستکاری- ایجاد کنید.
چه زمانی باید از Rails به جای Node.js استفاده کنید؟ Rails نمی تواند با عملکرد و مقیاس پذیری Node رقابت کند . با این حال Rails می تواند انتخاب بهتری برای توسعه سریع باشد. Node.js برای دستیابی به آن سرعت توسعه مجبور است از ماژول های شخص ثالث استفاده کند . اما روبی همه آن را در خود دارد. در مورد زبان ، هیچ کدام مزیت مشخصی ندارد.در حالی که Node.js تقاضای زیادی در بازار دارد اما متخصص کمی دارد .افراد متخصص حوزه Ruby از ابتدا چندان زیاد نبوده.
جنگو یک فریم ورک وب در پایتون است ، سریعترین زبان برنامه نویسی در حال رشد با توجه به داده های StackOverflow .و به عنوان ابزاری برای کمال گرایان که می خواهند به سرعت هر چه تمام تر کار را با ساختاری عالی , امن و قابل درک به اتمام برسانند عرضه می شود. جنگو ، همراه با پایتون ، دارای منحنی یادگیری ملایم تری هستند. اگرچه کار با Node.js به دانش گسترده JavaScript نیاز دارد . اما جنگو یک فناوری است که می شود گفت همه چیز از ابتدا در دسترس است. یک پنل مدیریت داخلی دارد که به راحتی پایگاه داده ها و قالب های شما را به روز می کند و نگه می دارد تا کار شما را تسریع و آسان کند.
چه زمانی باید از جنگو به جای Node.js استفاده کنید؟ در مقایسه با Node.js ، جنگو ابزاری مناسبتر برای مبتدیان است. به غیر از خود زبان ، هیچ دلیل واقعی دیگری برای انتخاب یکی بر دیگری وجود ندارد. این بیشتر بستگی به موارد خاص استفاده و راحتی و تجربه شما با جاوا اسکریپت یا پایتون است.
یک فریم ورک PHP است که به طور خودکار با بیش از 20 سال مستندات و یک جامعه فعال و گسترده ارایه می شود. بیش از 80 درصد وب توسط PHP و با پروژه هایی مانند Facebook . Baidu یا هر وب سایت دیگری که در وردپرس اجرا می شوند تأمین می شود. در حالی که Symfony فقط یکی از فریم ورک های PHP موجود در بازار است .اما به طور چشمگیری پایدار ، قابل توسعه و مناسب برای پروژه های بزرگ است.
چه زمانی باید از Symfony به جای Node.js استفاده کنید؟ Symfony به طور طبیعی از ویژگی های CMS مانند قالب ها و داشبورد مدیریت پشتیبانی می کند که به آن امکان می دهد وبلاگ ها . سایت های خبری و فروشگاه های تجارت الکترونیک را به راحتی اداره کند. برای مثال می توان به ، Dailymotion ، National Geographic و Yahoo Answers اشاره کرد.
بدیهی است که با تمام مزایا و معایب ذکر شده در مورد Node.js . این فناوری یک راه حل برای حل همه مشکلات نیست. اما Java ، .Net frame یا PHP نیز این گونه نیستند. با این حال ، موارد خاصی وجود دارد که هر یک از فن آوری های ذکر شده در آن بهترین عملکرد را دارند. در مورد Node.js ، برنامه ها در زمان آنی با ورودی و خروجی شدید ، نیاز به سرعت و مقیاس پذیری دارند بهترین کارایی را دارد.
این ممکن است شبکه های اجتماعی . برنامه های بازی . گفتگوی زنده یا انجمن ها و همچنین نرم افزار بورس اوراق بهادار یا سرورهای تبلیغاتی باشد ، جایی که سرعت همه چیز است. سریع و مقیاس پذیر ، Node.js فناوری انتخابی برای دستگاه های اینترنت اشیا و برنامه های کاربردی با زمان آنی است.
Node.js جاوا اسکریپت را به یک فناوری full stack برای توسعه برنامه های وب تبدیل کرده است. Node.js به دلیل معماری non-blocking ، برای پخش ویدئو و صدا ، بارگذاری چندین پرونده و data streaming به خوبی کار می کند.
اخیراً ، Node.js بصورت فعال در نرم افزارهای سطح سازمانی مورد استفاده قرار می گیرد. در حالی که هنوز بحث های زیادی در این باره وجود دارد ، بسیاری از شرکت های بزرگ و سازمان های جهانی مانند Capital One و ناسا Node.jsرا به کار گرفته اند. و اکوسیستم Node.js با ابزارهایی مانند IBM API Connect ، NodeSource ، Red Hat OpenShift ، و سایر ابزارها به بلوغ خود ادامه می دهد.