برنامه نویسی

موتور جاوا اسکریپت V8 – درک درخواست‌ها و پاسخ‌های API جاوا اسکریپت در چرخه حیات واکشی داده

موتور جاوا اسکریپت V8 توسط گوگل

قبل از این مقاله، من به شما اشاره کردم که مجموعه مقالات را شروع می کند و یک مقدمه ایجاد می کند. اگر کاری را که من انجام دادم از دست دادید، آن را بررسی کنید: مقدمه – درک درخواست‌ها و پاسخ‌های API جاوا اسکریپت در چرخه حیات واکشی داده

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

من در مورد موتور جاوا اسکریپت V8 می نویسم زیرا محبوب ترین موتور جاوا اسکریپت است و در مقایسه با سایر موتورهای جاوا اسکریپت، سریع ترین موتور جاوا اسکریپت وجود ندارد.

هنگامی که جاوا اسکریپت می نویسید، باید به خاطر داشته باشید که کد شما توسط یک موتور جاوا اسکریپت در مرورگر مانند V8 (مرورگرهای مبتنی بر کروم) و همچنین در پلتفرم های جاوا اسکریپت سمت سرور، مانند Node.js تفسیر می شود. ، SpiderMonkey (Firefox) و دیگران.

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

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

در اینجا جزئیاتی از V8 وجود دارد که توسعه دهندگان باید در مورد آن بدانند:

V8 در بسیاری از برنامه های محبوب استفاده می شود: موتور V8 در بسیاری از برنامه های محبوب از جمله مرورگر گوگل کروم، Node.js و فریم ورک Electron استفاده می شود.

V8 سازگاری بین پلتفرم است: V8 برای کار بر روی چندین پلتفرم از جمله Windows، macOS و Linux طراحی شده است.

V8 از چندین زبان برنامه نویسی پشتیبانی می کند: اگرچه V8 عمدتاً برای اجرای کد جاوا اسکریپت استفاده می شود، اما می تواند برای اجرای زبان های دیگری که می توانند در کد ماشین کامپایل شوند، مانند TypeScript و Dart نیز استفاده شود.

V8 از WebAssembly پشتیبانی می کند: V8 دارای پشتیبانی داخلی از WebAssembly است، یک قالب بایت کد سطح پایین که برای اجرای کد در وب طراحی شده است. این پشتیبانی به توسعه دهندگان اجازه می دهد تا ماژول های WebAssembly را در کنار کد جاوا اسکریپت در همان برنامه اجرا کنند.

گردآوری به موقع: V8 از یک تکنیک کامپایل در زمان (JIT) برای بهینه سازی کد جاوا اسکریپت در لحظه استفاده می کند. این به V8 اجازه می دهد تا کد ماشینی بسیار بهینه سازی شده ای تولید کند که می تواند کد جاوا اسکریپت را بسیار سریعتر از مفسرهای سنتی اجرا کند.

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

سازگاری ECMAScript: V8 از آخرین مشخصات زبان ECMAScript (جاوا اسکریپت) از جمله ECMAScript 2021 پشتیبانی می کند. این بدان معناست که توسعه دهندگان می توانند از جدیدترین ویژگی های زبان جاوا اسکریپت در برنامه های خود استفاده کنند.

ابزارهای رفع اشکال: V8 شامل مجموعه ای قوی از ابزارهای اشکال زدایی (Chrome DevTools) است که به توسعه دهندگان اجازه می دهد برنامه های جاوا اسکریپت خود را بررسی و اشکال زدایی کنند. این ابزارها شامل دیباگر جاوا اسکریپت، نمایه ساز و ابزار عکس فوری پشته ای است.

*از ساختارهای داده مناسب استفاده کنید: *V8 برای ساختارهای داده خاصی مانند آرایه ها و اشیا بهینه شده است. در صورت امکان، از این ساختارهای داده به جای ساختارهای داده سفارشی برای بهبود عملکرد استفاده کنید.

ادغام با Node.js: V8 موتور پیش‌فرض جاوا اسکریپت مورد استفاده در Node.js است که یک محیط اجرای جاوا اسکریپت سمت سرور محبوب است. این بدان معناست که توسعه‌دهندگان می‌توانند از کد جاوا اسکریپت یکسان در سمت کلاینت و سرور برنامه‌های خود استفاده کنند و از همان بهینه‌سازی‌های با کارایی بالا ارائه شده توسط V8 بهره ببرند. اگر Node.js را با سایر رقبا مقایسه کنیم، Deno از V8 نیز استفاده می کند و Bun از JavaScriptCore برای اجرای کد جاوا اسکریپت استفاده می کند.

موتور جاوا اسکریپت V8 چگونه کار می کند؟

موتور جاوا اسکریپت V8 دنباله ای از مراحل را برای اجرای کد جاوا اسکریپت دنبال می کند. در اینجا یک نمای کلی از توالی مراحلی است که V8 به شرح زیر است:

*تجزیه: *اولین مرحله در اجرای کد جاوا اسکریپت تجزیه است. موتور V8 کد جاوا اسکریپت را به عنوان ورودی می گیرد و آن را به یک درخت نحو انتزاعی (AST) تجزیه می کند که ساختار کد را نشان می دهد.

تلفیقی: هنگامی که کد تجزیه شد، موتور V8 آن را در بایت کد کامپایل می کند، یک نمایش سطح پایین از کد که می تواند کارآمدتر از کد منبع اجرا شود. V8 بایت کد را با استفاده از تکنیکی به نام کامپایل Just-In-Time (JIT) کامپایل می کند، به این معنی که کامپایل در زمان اجرا، درست قبل از اجرای کد انجام می شود.

*بهینه سازی: *بعد از کامپایل شدن کد، موتور V8 چندین تکنیک بهینه سازی را برای بهبود عملکرد خود اعمال می کند. این بهینه سازی ها شامل توابع درون خطی، حذف کدهای استفاده نشده و استفاده از بازخورد از اجرای قبلی کد برای بهبود کد ماشین تولید شده است.

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

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

اگر جاوا اسکریپت تک رشته ای است، چگونه به صورت ناهمزمان کار می کند؟

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

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

بنابراین، اگر می‌خواهید درباره تماس‌ها، وعده‌ها و async/wait بیشتر بدانید، لطفاً منتظر مقاله بعدی باشید که منتشر خواهم کرد.

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

نوشته های مشابه

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

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

دکمه بازگشت به بالا