A Firefox 70 továbbfejlesztett Javascript tolmácssal érkezik

Firefox 70

Közismert, hogy a modern webalkalmazások sokkal több JavaScript-kódot futtatnak mint néhány évvel ezelőtt. Bár a fordítók gyorsan követték a trendet és hatékonyabbá tették a JavaScript-et, a Mozilla számára megoldást kell bevezetni ennek a munkaterhelésnek még jobb kezelésére.

Ehhez A Mozilla kifejlesztett és hozzáadott egy új bytecode tolmácsot JavaScript a Firefox 70-be épített JavaScript renderelő motorjára. Mivel a Firefox 70 jövő októberben elérhető, a Mozilla jobb Java kódkezelést jelent be a JavaScript-motorjához hozzáadott új kódértelmező használatával.

E cél elérése érdekében Mozilla ezt elmagyarázza A modern JavaScript motorokban minden funkciót kezdetben egy kódértelmezőben hajtanak végre.

A soknak nevezett funkciókat natív gépkódba fordítják. Ezt nevezzük JIT-összeállításnak vagy menet közbeni összeállításnak. Ami A Firefox tartalmaz egy C ++ nyelven írt JavaScript kódértelmezőt és a JIT fordításának különböző szintjeit is.

Először is van egy alapvető JIT fordítónk, amely minden bytecode utasítást közvetlenül egy kis gépkóddá fordít le inline gyorsítótár használatával mind a teljesítmény, mind az IonMonkey vagy Ion nevű JIT fordító információgyűjtéséhez.

Viszont az IonMonkey fordító fejlett optimalizálásokkal állít elő gyors kódot a kritikus lehetőségekhez.

Meg kell jegyezni, hogy amikor egy már összeállított függvényt új típusú argumentummal hívnak meg, akkor a függvény kódja "deoptimizálható" és eldobható. Ebben az esetben a végrehajtás az alapkódban folytatódik a következő Ion buildig.

Bár a JavaScript kód értelmezésének ez a folyamata eddig elég jól működött, a A Firefox elmagyarázza, hogy az elsővel néhány problémával találkozott rész a C ++ tolmács és az alap JIT fordító alkotja.

Firefox 70

Valójában, néhány modern webes alkalmazás mint a Google Dokumentumok vagy a Gmail futtasson annyi JavaScript-et, hogy a fordító alap, sőt a JIT fordító is sokáig tölthetnék a funkciók ezreinek összeállítását.

Ezenkívül a C ++ tolmács nagyon lassú volt, és nem gyűjt típusú információkat, ami késlelteti az alapvető fordításokat. Az egyik megoldás az lett volna, hogy lehúzza a szálról, de ez teljesítménykockázatot jelentett volna.

E problémák megoldása érdekében a Mozilla emberei megjegyzik, hogy:

Az alapértelmezett tolmács a C ++ tolmács és az alap JIT fordító között van, és mindkét szint elemeit tartalmazza.

Minden bytecode utasítás végrehajtása fix tolmács hurokkal (például a C ++ tolmács), és inline gyorsítótárazási technikákat használ a teljesítmény javítása és a típusinformációk gyűjtése érdekében (mint az alapvető JIT).

Tolmács létrehozása nem új ötlet. De a Firefox csapata itt rámutat, hogy új módot találtak erre azáltal, hogy újból felhasználják az alap JIT fordító kódot. Az alapvető JIT fordító egy JIT modell, ami azt jelenti, hogy az egyes köztes kód utasítások lényegében rögzített gépi utasítások sorozatába vannak összeállítva, amelyeket aztán egy értelmezési ciklusban javasolnak.

Továbbá, mivel A Firefox fejlesztői azt akarták, hogy az alapértelmező pontosan ugyanazokat az online gyorsítótárakat használja és ugyanazokkal az információkkal, mint a JIT, egy új JitScript nevű adatstruktúra került hozzá.

A JitScript tartalmazza az alapértelmezők és a JIT fordító által használt összes típusú információt és inline gyorsítótár adatstruktúrákat.

Ezekkel az új megvalósításokkal a függvény alapvető fordítói adatai már csak gépi kódban vannak. Innen az összes gyorsítótárazott információt és profiladatot áthelyezték a JitScript-be.

Másrészt, mivel az alapértelmezett tolmács és a JIT fordító megegyezik, a létrehozott kód nagy része szintén megosztható.

Ehhez létrehoztak egy BaselineCodeGen nevű alaposztályt 2 másik származtatott osztállyal. Az alap fordító az első osztályú BalineCompiler programmal fordítja a szkript bájtkódját gépi kódba.

A második BaselineInterpreterGenerator osztály az alapértelmezett kód létrehozására szolgál. És a BaselineInterpreterGenerator osztállyal a Firefox csapatnak sikerült megépítenie az alapértelmezett tolmácsot.

forrás: https://hacks.mozilla.org/


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.