node js چیست؟ تعریف و بررسی کاربردهای آن!
جاوا اسکریپت یکی از محبوبترین زبانهای برنامه نویسی در جهان است. امروزه میلیونها وب سایت را پوشش میدهد و توسعه دهندگان و طراحان زیادی را برای ساخت ویژگیهای وب جذب کرده است. اگر شما یک برنامه نویس تازه کار هستید، جاوا اسکریپت یکی از بهترین زبانهای برنامه نویسی است که میتوانید از آن استفاده کنید.
برای 20 سال اول، جاوا اسکریپت عمدتاً برای اسکریپت کلاینت ساید استفاده شد. از آنجا که جاوا اسکریپت میتوانست تنها در تگ \script> استفاده شود، توسعه دهندگان مجبور به کار در چندین زبان و فریمورک بین کامپوننت های فرانتاند و بکاند بودند. بعداً Node.js آمد، که یک محیط ران تایم است و هر چیزی که برای اجرای یک برنامه نوشته شده به زبان جاوا اسکریپت نیاز است را شامل میشود.
node.js یک پلتفرم متقابل، تک رشتهای و اپن سورس است که برای ساخت سریع و مقیاس پذیر سرور و برنامههای کاربردی شبکه به کار میرود. node.js بر روی موتور زمان اجرای جاوا اسکریپت V8 اجرا میشود و از معماری I / O استفاده میکند، که برای برنامههای بلادرنگ (Real Time) مفید و مناسب است.
دنیای بزرگ مخاطبای آنلاین رو از دست نده!
node.js به چه زبانی نوشته شده است؟
node.js به زبان ++ C، C و جاوا اسکریپت نوشته شده است. ویکیپدیا node.js را به عنوان یک پکیج موتور جاوا اسکریپت Google، لایه انتزاعی پلت فرم Libu، و یک کتابخانه اصلی، که عمدتاً به زبان جاوا اسکریپت نوشته شده است، تعریف میکند.
زمان اجرا از Chrome V8 داخلی استفاده میکند، که موتور اجرایی جاوا اسکریپت است و همچنین در ++C نوشته شده است؛ که موارد استفاده اضافی مانند دسترسی به قابلیتهای داخلی سیستم (مانند شبکه) را به رپرتوار node.js اضافه میکند.
معماری node.js و نحوهی کار آن
node.js از معماری 'Single Threaded Event Loop' برای مدیریت چندین مشتری در یک زمان استفاده میکند. برای اینکه بدانیم چه تفاوتی با دیگر زمانهای اجرا دارد، باید بفهمیم که چگونه مشتریان همزمان چند رشتهای (multi thread) در زبانهایی مانند جاوا هندل میشوند.
در یک پرسش و پاسخ چند رشتهای (multi-threaded request response)، چند مشتری یا کلاینت یک درخواست ارسال میکنند، و سرور قبل از ارسال پاسخ هر یک را پردازش میکند. این رشتهها در یک استخر رشته (thread pool) تعریف شدهاند، و هر بار که یک درخواست میآید، یک رشته برای رسیدگی به آن تعیین میشود.
node.js به طور متفاوتی کار میکند؛ بیایید نگاهی به هر مرحله آن بیندازیم:
- node.js برای جواب دادن به درخواستها، thread pool محدودی دارد.
- هر زمان که درخواست میآید، node.js آن را در نوبت قرار میدهد.
- همانطور که در تصویر میبینید، حلقه رویداد (Event loop) به مدت نامعلومی منتظر درخواست میماند.
- هنگامی که یک درخواست وارد میشود، حلقه آن را از صف میگیرد و بررسی میکند که آیا نیاز به عملیات خروجی ورودی بلوک شده است. اگر نه، درخواست را پردازش میکند و یک پاسخ ارسال میکند.
- اگر درخواست یک عملیات بلوک شده داشته باشد، حلقه رویداد یک رشته را از استخر رشته برای پردازش درخواست تعیین میکند. رشتههای داخلی محدود هستند. این گروه از رشتههای کمکی گروه کارگر (worker group)نامیده میشود.
- حلقه رویداد درخواستهای بلاک کردن را انتخاب کرده و هنگامی که تسک های بلاک کردن در حال پردازش است، آنها را در صف قرار میدهد.
از آنجا که node.js از رشتههای کمتری استفاده میکند، از منابع یا حافظه کمتری استفاده میکند، که منجر به اجرای سریع کار میشود. بنابراین برای اهداف ما، این معماری تک رشتهای معادل معماری چند رشتهای (Multithreaded) است. هنگامیکه یک نفر میخواهد تسک های دیتای فشرده را پردازش کند، استفاده از زبانهای برنامه نویسی چندرشته ای مانند جاوا معنا پیدا میکند. برای اپلیکیشن های بلادرنگ Node.js بهترین انتخاب است.
ویژگیهای node.js
node.js در چند سال گذشته به سرعت رشد کرده است. این به لطف لیست گستردهای از ویژگیهایی است که فراهم میکند:
- آسان: node.js برای شروع بسیار آسان است و برای توسعه دهندگان مبتدی بهترین انتخاب است. با بسیاری از آموزشها و یک جامعه بزرگ، شروع به کار بسیار آسان است.
- انعطاف پذیر: انعطاف پذیری گستردهای را برای برنامههای کاربردی فراهم میکند. node.js قادر به هندل کردن تعداد زیادی از کانکشن های همزمان با بازدهی بالا است.
- سرعت: اجرای Non-blocking باعث شده است که Node.js سریعتر و مفیدتر باشد.
- پکیج ها: مجموعهای گسترده از پکیجهای اپن سورس node.js در دسترس است که میتواند کار شما را ساده کند. امروزه بیش از یک میلیون پکیج در اکوسیستم NPM وجود دارد.
- بکاند قوی: node.js در C و++ C نوشته شده است، که باعث میشود سریع باشد و ویژگیهای اضافی مانند پشتیانی شبکه را داشته باشد.
- چندسکوئی (Multi-platform): پشتیبانی از کراس پلتفرم به شما اجازه میدهد که با استفاده از Node.js، وب سایتهای SaaS، برنامههای دسکتاپ و اپلیکیشن های تلفن همراه بسازید.
- نگهداری: Node.js یک انتخاب آسان برای توسعه دهندگان است، زیرا بکاند و فرانتاند را میتوان با جاوا اسکریپت مدیریت کرد.
اندازه مارکت
در 2 دهه گذشته، وبسایتها رشد زیادی داشتهاند و همانطور که انتظار میرفت، Node.js سریعاً در حال رشد است. پس این تکنولوژی در طراحی سایت مانند طراحی سایت پزشکی و یا حتی طراحی سایت فروشگاهی و ... نیز بسیار کارآمد است. در حال حاضر زمان اجرا از آستانه 1 میلیارد دانلود گذشته است، و با توجه به W3Techs، node.js توسط 1.2٪ از تمام وبسایتها استفاده میشود، که بیش از 20 میلیون سایت در سراسر جهان را شامل میشود. تعدادی از شرکتهای مشهور که از Node.js استفاده میکنند عبارتند از:
Spotify
eBay
Godaddy
اپلیکیشن های Node.js
node.js برای طیف گستردهای از برنامههای کاربردی استفاده میشود. به بررسی تعدادی از آن ها میپردازیم.
چت های بلادرنگ یا Realtime Chats: با توجه به طبیعت threaded asynchronous آن، node.js برای پردازش ارتباطات بلادرنگ مورد استفاده قرار میگیرد. به راحتی میتواند اندازه گیری کند و اغلب در چت بات استفاده میشود.
اینترنت اشیا IOT: اپلیکیشن های IOT معمولاً دارای سنسورهای متعددی هستند، زیرا آنها اغلب تکههای کوچکی از دیتاها را ارسال میکنند که میتوانند به تعداد زیادی از درخواستها برسند. node.js انتخاب خوبی است زیرا به این درخواستهای همزمان سریعاً رسیدگی میکند.
جریان دیتا: شرکتهایی مانند نتفلیکس، برای جریان دیتا از Node.js استفاده میکنند. node.js کم حجم و سریع است، علاوه بر این، یک API جریان مخصوص به خود را دارد. این جریانها به کاربران اجازه میدهد تا درخواستها را برای یکدیگر بفرستند، و دیتاها به طور مستقیم به مقصد نهایی خود جریان داده میشوند.
اپلیکیشن های تک صفحهای پیچیده (SPAS): در SPAS، کل برنامه در یک صفحه بارگیری میشود. این معمولاً به این معنی است برای کامپوننت های خاص در بکگراند، چند درخواست وجود دارد. حلقه رویداد Node.js در اینجا برای نجات میرسد، زیرا درخواست آنها را به صورت non-blocking پردازش میکند.
برنامههای مبتنی بر REST API: جاوا اسکریپت هم در بکاند و هم در فرانتاند سایتها استفاده میشود. بنابراین، یک سرور به راحتی میتواند با استفاده از node.js، از طریق REST API با فرانتاند ارتباط برقرار کند. node.js پکیجهایی مانند Express.js و KoA را ارائه میدهد که ساخت برنامههای کاربردی وب را سادهتر میکند.
آیا node.js یک زبان برنامه نویسی است؟
node.js یک زبان برنامه نویسی نیست اما، یک محیط زمان اجرا است که برای اجرای جاوا اسکریپت خارج از مرورگر استفاده میشود. node.js یک فریم ورک هم (یک پلت فرم برای توسعه برنامههای کاربردی نرم افزار) نیست. زمان اجرا node.js در بالای یک زبان برنامه نویسی ساخته شده است. به طور خلاصه، node.js نه یک زبان برنامه نویسی و نه یک فریمورک است؛ بلکه یک محیط برای آنهاست..
node.js فرانتاند است یا بکاند؟
یک تصور غلط رایج در میان توسعه دهندگان این است که node.js یک فریمورک فرانتاند است و تنها برای ایجاد سرورها استفاده میشود. این درست نیست: node.js میتواند در بکاند و فرانتاند استفاده شود.
یکی از دلایلی که فریمورک های node.js یک انتخاب محبوب برای توسعه دهندگان بکاند است، طبیعت nonblocking و event driven (رویداد محور) بودن آن است. با این حال، توسعه دهندگان فرانتاند این مزیت node.js را در کار خود به همان اندازه واضحی میبینند.
چرا node.js برای هر دوی بکاند و فرانتاند کار میکند:
قابلیت استفاده مجدد
جاوا اسکریپت یک زبان مشترک است که برای نوشتن Backend و Frontend، با کمک فریمورک هایی مانند Express.js و Meteor.js استفاده می شود. برخی از استک های محبوب مانند MERN از Express.js به عنوان یک Backend (یک چارچوب node.js) استفاده میکنند. کامپوننت های متعدد را می توان بین بک اند و فرانت اند مجددا استفاده کرد.
بازدهی توسعه دهنده
با تشکر از کاهش تعویض زمینه (context switching) بین چندین زبان، مقدار زیادی از زمان توسعه دهنده را میتوان ذخیره کرد. استفاده از جاوا اسکریپت برای هر دو بکاند و فرانتاند منجر به افزایش کارایی میشود، زیرا بسیاری از ابزارها برای هر دو رایج هستند.
جامعه بزرگ
یک جامعه آنلاین پرطرفدار، نتیجهی سرعت یک چرخه توسعه موفق است. هنگامی که شما به یک مشکل برخورد کنید، شانس خوبی که وجود دارد این است که کسی قبلاً آن را حل کرده و راه حل را در استک اورفلو (Stack Overflow) به اشتراک گذاشت. زمانی که حرف از زمان اجرا و پکیجهای آن میآید، node.js از این جامعه استفاده میکند و فعال است.
شروع به کار با node.js
شروع کار با Node.js میتواند گیج کننده باشد. اما خوشبختانه نصب آن بسیار ساده است و پس از نصب قادر به تست آن هستید.
نحوه نصب node.js
اگر قبلاً Node.js را نصب کردهاید، به راحتی مراحل زیر را طی کنید.
نحوه نصب node.js در MacOS
با استفاده از Bash در Mac
با استفاده از Homebrew در Mac
نحوه نصب node.js در ویندوز
Windows Installer را به طور مستقیم از وب سایت Nodejs.org دانلود کنید.
نحوه نصب node.js در لینوکس
در اوبونتو +Ubuntu 18.04 شما میتوانید Node را با استفاده از دستورات زیر نصب کنید.
sudo apt update
sudo apt install nodejs
ورژن Node.js نصب شده را بررسی کنید.
در بخش قبلی ما Node را با موفقیت نصب کردیم. بیایید آن را با چک کردن نسخه نصب شده بررسی کنیم. فرمان زیر را در ترمینال اجرا کنید.
node --version
شما همچنین میتوانید آن را از طریق Flag طولانی بررسی کنید.
node –version
شما باید خروجی مشابه این را ببینید. اگرچه شماره نسخه ممکن است متفاوت باشد.
v14.16.0
NPM چیست؟
NPM اکوسیستم پکیج node.js است. این بزرگترین اکوسیستم تمام کتابخانههای اپن سورس در جهان است که بیش از یک میلیون پکیج دارد و در حال رشد است. NPM رایگان است و روزانه هزاران توسعه دهنده اپن سورس به آن کمک میکنند.
NPM با یک خط فرمان یا command Line خارج از باکس همراه است. شما میتوانید به راحتی به وب سایت NPM بروید تا پکیجی را که نیاز دارید جستجو کنید و آن را با استفاده از یک فرمان واحد نصب کنید. شما همچنین میتوانید از طریق این ابزار خط فرمان ورژن های پکیج خود را مدیریت، وابستگیها را بررسی و حتی اسکریپتهای سفارشی در پروژههای خود را راه اندازی کنید . بدون شک، NPM محبوبترین مالکیت جامعه Node.js است؛ node.js تعداد زیادی از توسعه دهندگان را جذب میکند تا از پکیجهای خود پشتیبانی کند.
نصب پکیجهای NPM از طریق CLI
هنگامی که شما node.js را نصب میکنید، NPM به طور خودکار همراه با آن نصب میشود. ما چگونگی نصب node.js را در بخشهای قبلی پوشش دادیم، بنابراین اکنون دستور نصب یک پکیج با NPM را بررسی میکنیم:
npm install <package-name>
به همین سادگی است! شما حتی میتوانید پکیجهای متعدد را همزمان نصب کنید:
npm install <pkg-1> <pkg-2> <pkg-3>
اگر میخواهید یک پکیج را در زمینه جهانی نصب کنید، میتوانید فلگ G (Global) را مشخص کنید. این به شما اجازه میدهد تا از پکیج در هر جایی از دستگاه خود استفاده کنید.
هنگامی که یک برنامه جدید را راه اندازی میکنید، NPM به طور خودکار یک فایل package.json را ایجاد میکند که شامل تمام بستههای NPM است. اینجا شما میتوانید نسخهها، وابستگیها و اسکریپتهای سفارشی را مشخص کنید.
یک لیست طولانی از دستورات از جمله publish، audit، run و موارد دیگر وجود دارد که با ابزار NPM میآید. شما میتوانید چگونگی استفاده از این را با استفاده از فرمان npm help بررسی کنید.
پکیج های محبوب
اکسپرس: Express.js، یا اکسپرس، یک فریمورک توسعه وب Sinatra برای node.js، و استاندارد واقعی برای اکثر برنامههای node.js است.
MongoDB: درایور آفیشال برای MongoDB. این برنامه API را برای دیتابیس آبجکت MongoDB در Node.js فراهم میکند.
Socket.io: سوکت ارتباطات زمان واقعی، دو طرفه و ارتباطات مبتنی بر رویداد را فعال میکند.
Lodash: Lodash با آرایهها، اعداد، اشیاء، رشتهها و غیره، استفاده از جاوا اسکریپت را آسان میکند.
Moment: کتابخانه تاریخ جاوا اسکریپت برای تجزیه، تأیید، دستکاری، و فرمت کردن تاریخها.
Commander.js: این تمام چیزی است که هنگام ساخت و کار با رابط خط فرمان برای node.js، به آن نیاز دارید.
Forever: یک ابزار ساده CLI برای اطمینان از اینکه یک اسکریپت داده شده به طور مداوم اجرا میشود. فرآیند Node.js خود را در برابر هر گونه شکست غیر منتظره، در حالت تولید نگه دارید.
Async: یک ماژول سودمند که فانکشن های ساده و قدرتمند را برای کار با جاوا اسکریپت ناهمزمان فراهم میکند.
Redis: یک کتابخانه مشتری برای پشتیبانی از ادغام دیتابیس Redis.
Mocha: یک فریمورک تست جاوا اسکریپت واضح و انعطاف پذیر برای node.js و مرورگر.
Passport: احراز هویت ساده و بی نظیر برای node.js. هدف Passport تأیید اعتبار درخواست است.
Hello World در node.js
مانند همیشه، بیایید با برنامه اصلی 'Hello World' شروع کنیم، جایی که ما یک سرور را در node.js ایجاد میکنیم که خروجی 'Hello World' را در یک درخواست سرور باز میگرداند.
قبل از اینکه شروع کنید، مطمئن شوید ویرایشگر متن خوبی را انتخاب کردهاید.
هنگامی که ویرایشگر متن خود را باز کردهاید، کد شما برای برنامه 'Hello World' بهصورت زیر است:
// server.js
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World! Welcome to Node.js');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
این فایل را به عنوان `server.js` ذخیره کنید. حالا به ترمینال بروید و سرور را با استفاده از دستور زیر شروع کنید:
node server.js
سرور باید شروع به کار کند. برای تأیید خروجی، http: \/\/ localhost: 3000 را در مرورگر باز کنید. باید پیام زیر را ببینید.
Hello World! Welcome to Node.js
توضیح سرور Hello World
node.js همراه با یک ماژول ساخته شده به نام 'http' است که اجازه میدهد node.js دیتاها را بر روی HyperText Transfer Protocol (HTTP) انتقال دهد.
در کد بالا، ما ابتدا ماژول HTTP را در برنامه ما بارگذاری میکنیم. سپس از روش CreateRver برای پذیرش یک درخواست استفاده میکنیم و پاسخ را با یک کد وضعیتی بازگردانیم. در نهایت، ما به یک پورت تعریف شده گوش میدهیم.
ایجاد سرور با استفاده از اکسپرس
اول ما باید در مورد یک سرور صحبت کنیم. یک سرور مسئول درخواست مشتری از طریق نرم افزار خود (اغلب Apache یا nginx)، انجام مجموعه مورد نیاز از وظایف، و در نهایت ارسال پاسخ به مشتریان است. اکسپرس فریمورکی است که به ما کمک میکند یک سرور را در Node ایجاد کنیم.
Express.js یک فریمورک انعطاف پذیر Node.JS است که مجموعهای قوی از ویژگیهای اپلیکیشن های کاربردی وب و تلفن همراه را فراهم میکند. اکسپرس اجازه میدهد تا جداول مسیر را به اپلیکیشن اضافه کنید و میان افزار را تنظیم کنید. شما میتوانید اکسپرس را با استفاده از دستور زیر نصب کنید.
npm install express --save
در بخش قبلی، ما از ابزار HTTP ساخته شده برای ایجاد یک سرور استفاده کردیم. حالا یک سرور 'Hello World' را با استفاده از Express.js ایجاد میکنیم.
ویرایشگر متن خود را باز کنید و این کد را وارد کنید:
// server-express.js
const express = require('express')
const app = express() // initialize app
const port = 3000
// GET callback function returns a response message
app.get('/', (req, res) => {
res.send('Hello World! Welcome to Node.js')
})
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`)
})
سپس سرور خود را با دستور زیر اجرا خواهیم کرد.
node server-express.js
حالا http://localhost:3000 را در مرورگر خود بررسی کنید تا خروجی Hello World را ببینید.
موضوع: طراحی وبسایت
در بحث پیرامون این مقاله شرکت کنید