Firefox 70 ще пристигне с подобрен интерпретатор на Javascript

Firefox 70

Общоизвестно е, че съвременните уеб приложения изпълняват много повече JavaScript код отколкото преди няколко години. Въпреки че компилаторите бързо следват тенденцията и са направили JavaScript ефективен, за Mozilla трябва да се приложи решение, за да се справи с това натоварване още по-добре.

За да направите това, Mozilla разработи и добави нов интерпретатор на байт кодове JavaScript към своя механизъм за визуализиране на JavaScript, вграден във Firefox 70. С Firefox 70, който се предлага през октомври, Mozilla обявява по-добро управление на JavaScript кода, като използва своя нов интерпретатор на код, добавен към неговия JavaScript двигател.

За постигане на тази цел, Mozilla обяснява това В съвременните JavaScript двигатели всяка функция първоначално се изпълнява в интерпретатор на код.

Функциите, които се наричат ​​много, се компилират в собствен машинен код. Това се нарича JIT компилация или компилация в движение. Що се отнася до Firefox включва и интерпретатор на JavaScript код, написан на C ++ и различни нива на JIT компилация.

Първо, имаме основен JIT компилатор, който компилира всеки оператор на байт код директно в малка част от машинен код, използвайки вградено кеширане както за производителност, така и за събиране на информация за JIT компилатора, наречен IonMonkey или Ion.

На свой ред компилаторът IonMonkey използва разширени оптимизации, за да генерира бърз код за критични опции.

Трябва да се отбележи, че когато функция, която вече се компилира, се извика с нов тип аргумент, кодът във функцията може да бъде "де-оптимизиран" и изпуснат. В този случай изпълнението продължава в основния код до следващото изграждане на Ion.

Въпреки че този процес на тълкуване на JavaScript кода е работил доста добре досега, екипът на Firefox обяснява, че е срещнал някои проблеми с първия част съставен от интерпретатора C ++ и базовия JIT компилатор.

Firefox 70

Всъщност, някои съвременни уеб приложения като Google Docs или Gmail стартирайте толкова много JavaScript, че компилаторът base и дори JIT компилатор те биха могли да прекарат дълго време в опити да компилират хиляди функции.

Също така, C ++ интерпретаторът е много бавен и не събира информация за типа, забавяйки основната компилация. Едно решение би било да го изтеглите от нишката, но това би представлявало риск за производителността.

За да разрешат тези проблеми, хората от Mozilla коментират, че:

Базовият интерпретатор е между интерпретатора C ++ и базовия JIT компилатор и съдържа елементи от двете нива.

Изпълнява всички оператори на байт кодове с фиксиран интерпретационен цикъл (като интерпретатора C ++) и използва техники за вградено кеширане, за да подобри производителността и да събере информация за типа (както прави основният JIT).

Генерирането на преводач не е нова идея. Но екипът на Firefox посочва тук, че са намерили нов начин да направят това, като използват повторно повечето от основния код на JIT компилатора. Основният JIT компилатор е JIT модел, което означава, че всяка междинна кодова инструкция се компилира в по същество фиксирана последователност от машинни инструкции, които след това се предлагат в интерпретационен цикъл.

Също така, тъй като Разработчиците на Firefox искаха базовият интерпретатор да използва абсолютно същите онлайн кешове и същата информация като JIT, беше добавена нова структура от данни, наречена JitScript.

JitScript съдържа цялата информация за типа и структурите от данни за вградено кеширане, използвани от базовите интерпретатори и JIT компилатора.

С тези нови внедрения основните данни за компилатора за функция вече са само в машинен код. Оттам цялата кеширана информация и данни за профилиране са преместени в JitScript.

От друга страна, тъй като основният интерпретатор и JIT компилаторът са идентични, голяма част от генерирания код също може да бъде споделен.

За целта е създаден основен клас, наречен BaselineCodeGen, с още 2 производни класа. Базовият компилатор използва първия клас BalineCompiler, за да компилира байт кода на скрипт в машинен код.

Вторият клас BaselineInterpreterGenerator се използва за генериране на кода за основния интерпретатор. И с класа BaselineInterpreterGenerator, екипът на Firefox успя да изгради базовия интерпретатор.

Fuente: https://hacks.mozilla.org/


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.