چرا نود جی اس Nodejs اینقدر سریع است؟

چه چیزی Node.js را اینقدر سریع می کند؟

هنگام صحبت در مورد Node.js، اولین چیزی که به ذهن می رسد سرعت اجرا است. بنابراین، در این بخش، ما سعی خواهیم کرد بفهمیم که چرا Node.js سریعتر از سایرین است. اول، مهم است که بدانیم منظور از “سرعت اجرا” چیست.
سرعت اجرا می تواند به معنای هر چیزی باشد، از محاسبه دنباله فیبوناچی تا جستجو در پایگاه داده.
سرعت اجرا در زمینه خدمات وب همه آن چیزی است که برای پردازش یک درخواست و ایجاد پاسخ برای مشتری لازم است. این مدت زمانی است که برای پردازش یک درخواست طول می کشد، از اولین اتصال شروع می شود و زمانی که مشتری پاسخ دریافت می کند به پایان می رسد.
در ادامه نگاهی به جنبه های مختلف بیندازید که کمک می کند بفهمید که چرا Node.js اینقدر سریع است.

Node.js تک رشته ای و ناهمزمان single-threaded and asynchronous است: این بدان معنی است که تمام فعالیت های ورودی/خروجی با سایر فرآیندها تداخلی ندارد و امکان ارسال ایمیل، خواندن و نوشتن فایل ها، پایگاه های داده پرس و جو و غیره به طور همزمان وجود دارد. .
هر درخواست به وب سرور فرآیند Node.js متفاوتی ندارد. با این حال، یک فرآیند Node.js همیشه در حال اجرا است و به اتصالات گوش می دهد. تمام کدهای جاوا اسکریپت در رشته اصلی فرآیند اجرا می‌شوند و سایر فعالیت‌های ورودی/خروجی در رشته‌ای متفاوت با تاخیر کم یا بدون تاخیر اجرا می‌شوند.
ماشین مجازی در Node.js (V8) که وظیفه اجرای جاوا اسکریپت را بر عهده دارد، با استفاده از JIT کامپایل شده است. در زمان اجرا، ماشین مجازی می تواند کد منبع را گرفته و آن را در کد ماشین کامپایل کند. این به این معنی است که تمام توابع “hot” که اغلب استفاده می شود را می توان در کد ماشین کامپایل کرد که سرعت اجرا را افزایش می دهد.

درباره Asynchronous غیر همزمان

با کمک مثال، سعی خواهیم کرد مفهوم پردازش ناهمزمان را درک کنیم.

فرض کنید در بالای یک کوه 100 توپ در اطراف قله وجود دارد. هدف این است که در کوتاه ترین زمان ممکن تمام توپ ها را به پایین کوه برسانید. بدیهی است که شما نمی توانید به همه توپ ها یکجا ضربه بزنید، بنابراین باید یکی یکی به آنها ضربه بزنید. در این مرحله دو گزینه وجود دارد.

در روش اول، می توانید قبل از ضربه زدن به توپ بعدی، به یک توپ ضربه بزنید و منتظر بمانید تا به پایین کوه برسد. با این حال، در این روش زمان زیادی طول می کشد تا همه توپ ها را به پایین کوه هدایت کنید.

در روش دوم این امکان وجود دارد که به توپ ها یکی یکی ضربه بزنید بدون اینکه منتظر بمانید تا به پایین کوه برسند. با استفاده از این روش می توان هر 100 توپ را در کمترین زمان ممکن به پایین کوه فرستاد.

روش اول به صورت همزمان اجرا می شود در حالی که روش دوم به صورت ناهمزمان اجرا می شود. مثال قبلی نشان می دهد که اجرای ناهمزمان چقدر سریعتر از عملیات همزمان است.

اکنون که به نوعی بر اصول برنامه نویسی ناهمزمان آشنا شدید، بیایید ببینیم که چگونه این موضوع می تواند به عملکرد وب سرور کمک کند.

فرض کنید که هر توپ مربوط به یک کوئری پایگاه داده است. بنابراین، اگر داده ها به صورت همزمان برای یک پروژه بزرگ با تعداد زیادی تجمع، جستجو و غیره پردازش شوند، اجرای کد مسدود می شود.

با این حال، اگر به صورت ناهمزمان پردازش شود، همه پرس و جوها می توانند به طور همزمان اجرا شوند و سپس نتایج جمع آوری شوند.
در باطن، Node.js با Angular، React، React Native و Vue.js ترکیب شده است تا پردازش و رندر با سرعت رعد و برق ارائه دهد.

حلقه رویداد Event Loop

حلقه رویداد مکانیزمی است که مسئول زمان بندی رویدادها در یک برنامه است که همیشه به صورت ناهمزمان با آغازگر پیام اجرا می شود.

هنگام استفاده از Node.js، در حین اجرای عملیات ورودی/خروجی، فراخوانی اختصاص داده شده به عملیات را نگه می دارد، بنابراین امکان ادامه پردازش سایر رویدادها را فراهم می کند. هنگامی که تمام داده های لازم جمع آوری شد، تماس برگشتی فراخوانی می شود.

وب سرور تمام درخواست ها را به حلقه رویداد می فرستد، که عملیات را در مخزن رشته ثبت می کند و به آنها پاسخ تماس اختصاص می دهد.

هنگامی که درخواست پردازش شد، پاسخ تماس فراخوانی می شود. سایر فعالیت های سخت مانند جستجوی پایگاه داده را می توان با استفاده از callbacks اجرا کرد.

نقش V8 در بهینه سازی کد

V8 از دو نوع کامپایلر تشکیل شده است.

کامپایلرهای کامل Complete compilers
کامپایلر میل لنگ Crankshaft compiler
کل کامپایلر به دلیل سرعت و توانایی خود در تولید کدهای عمومی شناخته شده است. همچنین Abstract Syntax Tree (AST) توابع جاوا اسکریپت را به کد بومی عمومی generic native code تبدیل می کند. در این سطح، تنها یک بهینه سازی انجام می دهد: کش درونی inline caching.

V8 یک رشته تجزیه کننده را در حین اجرای کد راه اندازی می کند و توابع را کامپایل می کند تا مشخص کند کدام یک داغ هستند و کدام یک نیستند. علاوه بر این، بازخورد نوع را دریافت می کند، که به V8 کمک می کند تا انواع داده هایی را که از طریق آن ارسال می شود، پیگیری کند.

پس از شناسایی توابع داغ و جمع‌آوری بازخورد در مورد انواع خاص، V8 تلاش می‌کند تا با بهینه‌سازی کامپایلر، یک AST پیشرفته را انجام دهد، که گاهی اوقات کامپایلر «Crankshaft» نامیده می‌شود.

کامپایلر Crankshaft کندتر است، اما سعی می کند کد کارآمد تولید کند. از دو عنصر هیدروژن و لیتیوم تشکیل شده است.

کامپایلر هیدروژن با ایجاد نمودار جریان کنترل (CFG) از فایل AST کار می کند. نمودار حاصل به صورت یک گراف تک انتساب ایستا static single assignment (SSA) نمایش داده می شود.

با فرم SSA و ساختار ساده نمایش متوسط سطح بالا، کامپایلر می تواند بهینه سازی های زیادی مانند روش انجام دهد.
خط کشی، تا شدن مداوم و غیره

هدف اصلی کامپایلر لیتیوم تبدیل HIR بهینه شده به یک LIR است که بسیار شبیه به کد ماشین است، با این تفاوت که مستقل از پلتفرم است.

پس از آن، کد قدیمی و بهینه نشده با کد بهینه شده جایگزین می شود. این به اجرای سریعتر کد کمک می کند.

چندین سناریوی کاربردی خوب

علاوه بر سرعت، Node.js دارای ویژگی های بسیاری است که توسعه دهندگان می توانند در طیف وسیعی از برنامه ها از آنها استفاده کنند. نگاهی به برخی از سناریوهای برتر برنامه Node.js بیندازید.

برنامه های کاربردی بلادرنگ real_time

هنگامی که از شما پرسیده شد، “بهترین سناریوی برنامه برای Node.js چیست؟” برنامه های real-time بهترین راه حل هستند. این یکی از برنامه هایی است که Node.js در آن برتری دارد. چرا Node.js در برنامه های بلادرنگ بسیار محبوب است.

Node.js از استفاده مجدد و اشتراک گذاری بسته های Node.js که برای ذخیره کدهای کتابخانه استفاده می شود، پشتیبانی می کند.
این مزیت منجر به همگام سازی سریع داده ها بین سرور و کلاینت می شود.
به راحتی می تواند با چندین درخواست مشتری کنار بیاید.
به طور خلاصه، اگر پردازش بلادرنگ داده و مقیاس پذیری دو ملاحظه مهم برای یک پروژه هستند، Node.js بهترین فناوری برای استفاده است.

نه تنها این، دلایل زیادی وجود دارد که چرا Node.js باید برای توسعه برنامه بلادرنگ استفاده شود. بنابراین، اگر کسی می‌پرسد که چرا Node.js برای توسعه برنامه‌های بلادرنگ انتخاب شده است، به همین دلیل است.

سرورهای مبتنی بر رویداد

چندین کاربر بلادرنگ real-time باید در برنامه های بلادرنگ real-time مدیریت شوند. اینجاست که Node.js به کار می‌آید، زیرا می‌تواند پاسخ‌های سرور مبتنی بر رویداد را مدیریت کند و فانکشن های non-blocking غیر مسدودکننده را فعال کند.

همگام سازی داده ها

توسعه دهندگان Node.js از عملکرد ورودی/خروجی غیر مسدود کننده non-blocking استفاده می کنند. همچنین امکان انتقال سریع اطلاعات بین کلاینت و سرور را فراهم می کند.

سرورهای پروکسی

Node.js زمانی ایده آل است که به یک مدیر واسطه نیاز باشد. برای استفاده از Node.js به عنوان یک سرور پروکسی، توسعه دهندگان باید 20 خط کد بنویسند. پس از آن، برنامه برای پخش داده ها از بسیاری از منابع عالی خواهد بود.

داشبورد مانیتورینگ برنامه

یکی دیگر از برنامه های محبوب Node.js ردیابی بازدیدکنندگان وب سایت و تجسم تمام فعالیت های زمان واقعی است.

آمارهای بی‌درنگ درباره کاربران را می‌توان در اینجا جمع‌آوری کرد، و علاوه بر این، تعاملات هدفمند با مشتریان را می‌توان با باز کردن کانال‌های ارتباطی به سادگی زمانی که مصرف‌کنندگان به مرحله خاصی از کانال رسیدند، ایجاد کرد.

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

داشبورد مانیتورینگ سیستم

اکنون به سمت زیرساخت برگردیم، ارائه‌دهنده SaaS را در نظر بگیرید که می‌خواهد یک سایت نظارت بر خدمات مشابه صفحه وضعیت GitHub را در اختیار کاربران قرار دهد.

حلقه رویداد Node.js امکان ایجاد یک داشبورد قدرتمند مبتنی بر وب را فراهم می کند که می تواند وضعیت یک سرویس را به صورت ناهمزمان نظارت کند. با پشتیبانی WebSockets، داده ها را نیز به مشتری منتقل می کند.

از این فناوری می توان برای گزارش وضعیت خدمات عمومی و داخلی به صورت بلادرنگ استفاده کرد.

برنامه های نظارتی مرکز عملیات شبکه (NOC) را برای موسسات مالی، اپراتورهای مخابراتی یا ارائه دهندگان ابر/شبکه/میزبانی در نظر بگیرید که همگی در یک پشته وب باز با استفاده از WebSockets و Node.js به جای جاوا یا اپلت جاوا اجرا می شوند.

پخش ویدئو

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

همچنین امکان ایجاد جریان های داده قابل نوشتن و خواندنی را فراهم می کند. همچنین می‌توانید فایل‌ها را هنگامی که با استفاده از Node.js آپلود می‌شوند دستکاری کنید.

Node.js همچنین توسط Netflix، بزرگترین سرویس استریم جهان با فعالیت در بیش از 190 کشور استفاده می شود.

کل رابط کاربری Netflix بر اساس فناوری Node.js ساخته شده است و Netflix به زودی تصمیم گرفت از آن در چندین لایه پشته دیگر استفاده کند زیرا بسیار مؤثر بود.
هدف اصلی تیم توسعه نتفلیکس از پذیرش Node.js ایجاد یک نرم افزار سبک وزن بود که بتواند عملکرد بالایی داشته باشد. برنامه جدید مبتنی بر گره، روند بارگذاری را تا 70 درصد افزایش داد. علاوه بر این به نتایج زیر نیز منجر شد.

عملکرد بهبود یافته است
کاهش زمان ساخت
فعال کردن سفارشی سازی کاربر

برنامه های کاربردی با مقیاس پذیری بالا

Node.js به پلتفرم منتخب برای همه برنامه‌ها و پلتفرم‌ها با پایگاه‌های کاربر به طور پیوسته در حال رشد تبدیل شده است. شرکت‌هایی مانند Walmart، PayPal، Uber، Netflix، LinkedIn و بسیاری دیگر از Node.js استفاده می‌کنند زیرا امکان مقیاس‌گذاری یکپارچه را فراهم می‌کند.

فناوری پیشرفته Node.js شامل ویژگی هایی مانند ماژول های خوشه بندی است. این توازن بار را در چندین هسته CPU فراهم می کند و ارائه نتایج دلخواه را با ماژول های کوچکتر بدون خالی شدن رم آسان تر می کند.

نه تنها این، بلکه Node.js همچنین دارای یک سیستم حلقه رویداد غیر مسدود کننده است که به سرورها اجازه می دهد تا درخواست ها را در زمان واقعی پردازش کنند.

در سمت توسعه، Node.js امکان استفاده از میکروسرویس ها را فراهم می کند، که بیشتر امکان تجزیه برنامه ها را به اجزای کوچکتر می دهد.

با تعریف و توزیع کارآمد وظایف بین تیم های مختلف، توسعه، استقرار و نگهداری هر یک از اجزای یک برنامه کاربردی را می توان تسریع کرد.

با Node.js، برنامه‌های مدرن را می‌توان در صورت نیاز کوچک و بزرگ کرد. همچنین می تواند به سازمان ها در دستیابی به عملکرد بالاتر با منابع کمتر کمک کند.

چت آنلاین

برنامه های چت رایج ترین سناریو برای برنامه های همزمان و چند کاربره هستند. از آنجایی که این یک برنامه فشرده داده، پرترافیک و سبک است که در چندین دستگاه توزیع شده اجرا می شود، برنامه های چت یکی از بزرگترین سناریوها برای Node.js هستند.

سناریوی زیر را در نظر بگیرید: یک اتاق گفتگوی جداگانه در وب سایت وجود دارد که افراد می توانند در آن بیایند و پیام های خود را مبادله کنند. فرض کنید سه نفر در سایت هستند که به تابلوی پیام دسترسی دارند.
در این مورد، برنامه Express.js سمت سرور دو تابع زیر را اجرا می کند.

یک کنترل کننده درخواست برای ارائه صفحه وب GET / متشکل از یک صفحه پیام و یک دکمه “ارسال” برای مقداردهی اولیه ورودی پیام جدید
سرور WebSockets به تمام پیام های جدید ارسال شده توسط سرویس گیرنده WebSocket گوش می دهد.
در سمت کلاینت، ما یک صفحه HTML داریم که برخی از کنترلرها را تنظیم کرده است. یکی از آنها رویداد کلیک دکمه “ارسال” است که مسئول دریافت پیام دریافتی و ارسال آن به WebSocket است. یکی دیگر برای گوش دادن به پیام های دریافتی جدید ارسال شده به سرویس گیرنده WebSocket استفاده می شود.

خلاصه

Node.js با اجرای سریع رعد و برق خود ثابت کرده است که برای بسیاری از توسعه دهندگان و شرکت ها نجات بخش است و بسیاری از شرکت های بزرگ از این ویژگی Node.js استفاده کرده اند.

Facebook
Twitter
LinkedIn
Telegram
WhatsApp

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آخرین مقالات و نوشته ها