سایت خبرکاو

جستجوگر هوشمند اخبار و مطالب فناوری

موتور جاوا اسکریپت و زمان اجرا توضیح داده شده است

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

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

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

هر مرورگر موتور JS مخصوص به خود را دارد، اما شناخته شده ترین آنها موتور v8 گوگل است. این موتور v8 به Google Chrome و همچنین Node.js (برای ساخت برنامه های سمت سرور استفاده می شود) قدرت می دهد.

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

در اینجا چیزی است که ما در این راهنمای سریع پوشش خواهیم داد:

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

تالیف در مقابل تفسیر

JavaScript Runtime چیست ؟

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

هر موتور JS همیشه شامل یک پشته تماس و یک پشته است.

پشته تماس جایی است که کد ما با کمک زمینه اجرا اجرا می شود. و heap یک مخزن حافظه بدون ساختار است که تمام اشیاء را در حافظه مورد نیاز برنامه ما ذخیره می کند.

js_engine
موتور جاوا اسکریپت از یک پشته تماس و یک پشته تشکیل شده است

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

تالیف در مقابل تفسیر

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

تلفیقی
کد منبع در کد ماشین کامپایل می شود و سپس در حین اجرای برنامه اجرا می شود

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

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

JS قبلاً یک زبان کاملاً تفسیر شده بود. اما موتور JS مدرن اکنون از ترکیبی از کامپایل و تفسیر استفاده می کند که به عنوان کامپایل "در زمان" شناخته می شود.

در کامپایل JIT، کل کد به یکباره به کد ماشین تبدیل می شود و سپس بلافاصله اجرا می شود.

تالیف-1
کد منبع در کد ماشین کامپایل می شود و بلافاصله اجرا می شود

ممکن است تعجب کنید که تفاوت بین کامپایل و JIT چیست. خوب، یک تفاوت عمده وجود دارد: پس از کامپایل، کد ماشین در یک فایل قابل حمل ذخیره می شود. می توان آن را در هر زمانی اجرا کرد - نیازی به عجله بلافاصله پس از فرآیند تدوین نیست.

اما در مورد JIT، کد ماشین باید به محض پایان کامپایل اجرا شود.

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

JIT و جاوا اسکریپت

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

پس ، هر زمان که یک کد جاوا اسکریپت وارد موتور شد، اولین قدم تجزیه کد است.

در طی این فرآیند تجزیه، کد در یک ساختار داده به نام AST (درخت نحو انتزاعی) تجزیه می شود. این کار بدین صورت است که ابتدا هر خط کد را به قطعاتی که برای زبان معنادار هستند (مانند کلمات کلیدی const یا تابع) تقسیم می‌کند و سپس تمام این قطعات را به‌صورت ساختاریافته در درخت ذخیره می‌کند.

این مرحله همچنین تحلیل می کند که آیا خطاهای نحوی وجود دارد یا خیر. درخت حاصل بعداً برای تولید کد ماشین استفاده خواهد شد.

برای مثال، بیایید نگاهی به یک AST برای این خط کد const greet = "Hello" :

 { "type": "Program", "start": 0, "end": 201, "body": [ { "type": "VariableDeclaration", "start": 179, "end": 200, "declarations": [ { "type": "VariableDeclarator", "start": 185, "end": 200, "id": { "type": "Identifier", "start": 185, "end": 190, "name": "greet" }, "init": { "type": "Literal", "start": 193, "end": 200, "value": "Hello", "raw": "\"Hello\"" } } ], "kind": "const" } ], "sourceType": "module" }
درخت AST در قالب JSON

شما نیازی به دانستن یا درک نحوه عملکرد AST ندارید، این فقط برای کنجکاوی است.

شما می توانید در اینجا بازی کنید و AST خود را ایجاد کنید.

مرحله بعدی تدوین است. در اینجا موتور AST را می گیرد و آن را به کد ماشین کامپایل می کند.

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

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

js_jit
JIT در جاوا اسکریپت

پس ، تا این مرحله، شما با موتور JS و نحوه عملکرد آن در پشت صحنه آشنا شده اید. اکنون، بیایید یاد بگیریم که زمان اجرا جاوا اسکریپت چیست – و به ویژه زمان اجرا مرورگر.

JavaScript Runtime چیست؟

زمان اجرا جاوا اسکریپت (JS) یک محیط جامع است که اجرای کد جاوا اسکریپت را امکان پذیر می کند. این شامل اجزای مختلفی است که با هم کار می کنند تا اجرای برنامه های جاوا اسکریپت را تسهیل کنند. وقتی به یک زمان اجرا JS اشاره می کنیم، معمولاً در مورد کل اکوسیستم صحبت می کنیم که فراتر از اجرای اصلی کد است.

بسته به جایی که جاوا اسکریپت در حال اجرا است (مرورگر وب یا سمت سرور با Node.js)، ممکن است ویژگی های محیطی خاص در زمان اجرا وجود داشته باشد. به عنوان مثال، در یک مرورگر، می‌تواند آپشن های مربوط به مدیریت رویدادهای مرورگر، دسترسی به DOM و تعامل با عملکردهای خاص مرورگر وجود داشته باشد.

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

فقط یک زمان اجرا JS را به عنوان یک جعبه بزرگ در نظر بگیرید که شامل همه چیزهایی است که ما برای اجرای جاوا اسکریپت در مرورگر نیاز داریم.

JS_runtime_1
زمان اجرا جاوا اسکریپت

هسته یک زمان اجرا JS موتور JS است.

JS_runtime_2
موتور جاوا اسکریپت در زمان اجرا جاوا اسکریپت

اما موتور به تنهایی کافی نیست. برای اینکه به درستی کار کنیم، به Web API نیاز داریم.

زمان‌های اجرا JS، به‌ویژه در زمینه مرورگرهای وب، دارای Web API هستند که عملکردهای اضافی فراتر از زبان اصلی جاوا اسکریپت را ارائه می‌دهند. این APIها شامل تعامل با Document Object Model (DOM)، XMLHttpRequest (برای ایجاد درخواست‌های HTTP)، تایمرها و موارد دیگر است.

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

پس ، اساساً Web APIها عملکردهایی هستند که در اختیار موتور قرار می‌گیرند اما بخشی از خود زبان جاوا اسکریپت نیستند. جاوا اسکریپت از طریق شی window به این APIها دسترسی پیدا می کند.

JS_runtime_3
موتور جاوا اسکریپت و APIهای وب در زمان اجرا جاوا اسکریپت

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

JS_runtime_4
موتور جاوا اسکریپت، APIهای وب و صف برگشت به تماس در زمان اجرا جاوا اسکریپت

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

در اینجا نحوه عملکرد آن در پشت صحنه است:

ابتدا، پس از وقوع رویداد، تابع callback در صف برگشت قرار می گیرد.

JS_runtime_5
رویداد کلیک داخل صف برگشت تماس است

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

JS_runtime_7
رویداد کلیک اکنون به پشته تماس می رود

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

خودشه! اکنون شما اصول اولیه نحوه کار JS Engine و JS Runtime را می دانید.

نتیجه

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

هنگام تحلیل زمان اجرا جاوا اسکریپت در مرورگر، از موتور JS، WEB APIها، صف برگشت و یک حلقه رویداد تشکیل شده است. حلقه رویداد نقش مهمی در انتقال توابع برگشت به تماس از صف به پشته تماس ایفا می‌کند و اجرای یکپارچه برنامه‌های جاوا اسکریپت را تضمین می‌کند.

خبرکاو