„Firefox 70“ atvyks su patobulintu „Javascript“ vertėju

"Firefox 70

Visuotinai žinoma, kad šiuolaikinėse žiniatinklio programose veikia daug daugiau „JavaScript“ kodo nei prieš kelerius metus. Nors sudarytojai greitai sekė tendenciją ir padarė „JavaScript“ efektyvų, „Mozilla“ turi būti įdiegtas sprendimas, kuris dar geriau atlaikytų šį darbo krūvį.

Norėdami tai padaryti, „Mozilla“ sukūrė ir pridėjo naują baitų kodų vertėją „JavaScript“ į „JavaScript“ atvaizdavimo variklį, įmontuotą „Firefox 70“. Kai „Firefox 70“ bus prieinama kitą spalį, „Mozilla“ praneša apie geresnį „JavaScript“ kodų valdymą naudodama naują „JavaScript“ kodą, pridėtą prie „JavaScript“ variklio.

Norėdami pasiekti šį tikslą, Mozilla tai paaiškina Šiuolaikiniuose „JavaScript“ varikliuose kiekviena funkcija iš pradžių vykdoma kodo interpretatoriuje.

Funkcijos, kurios vadinamos daugybe, yra sukompiliuotos į gimtąjį mašinos kodą. Tai vadinama JIT rinkiniu arba kompiliacija skrendant. Kalbant apie „Firefox“ taip pat yra „C ++“ parašytas „JavaScript“ kodo vertėjas ir įvairūs JIT kompiliavimo lygiai.

Pirma, mes turime pagrindinį JIT kompiliatorių, kuris kiekvieną baito kodo sakinį surenka tiesiai į nedidelį mašininio kodo fragmentą, naudodamas tiesioginę talpyklą tiek JIT kompiliatoriaus, vadinamo „IonMonkey“, tiek „Ion“, našumui ir informacijos rinkimui.

Savo ruožtu „IonMonkey“ kompiliatorius naudoja pažangų optimizavimą, kad sugeneruotų greitą kodą svarbiausioms parinktims.

Reikėtų pažymėti, kad iškvietus jau kompiliuojamą funkciją su naujo tipo argumentais, funkcijos kodas gali būti „deoptimizuotas“ ir atmestas. Tokiu atveju vykdymas tęsiamas pagrindiniame kode iki kito „Ion“ sukūrimo.

Nors šis „JavaScript“ kodo aiškinimo procesas iki šiol veikė gana gerai, komanda „Firefox“ paaiškina, kad su pirmuoju susidūrė su tam tikromis problemomis dalis sudarytas iš vertėjo C ++ ir pagrindinio JIT kompiliatoriaus.

"Firefox 70

Iš tikrųjų kai kurios šiuolaikinės žiniatinklio programos kaip „Google“ dokumentai ar „Gmail“ paleisti tiek „JavaScript“, kad kompiliatorius bazę ir net JIT kompiliatorių jie galėtų ilgai praleisti bandydami sudaryti tūkstančius funkcijų.

Be to, C ++ vertėjas buvo labai lėtas ir nerenka informacijos apie tipą, todėl atidėtas pagrindinis kompiliavimas. Vienas iš sprendimų būtų buvęs jį nutraukti, tačiau tai būtų rizika našumui.

Norėdami išspręsti šias problemas, „Mozilla“ žmonės komentuoja, kad:

Pagrindinis vertėjas yra tarp C ++ vertėjo ir pagrindinio JIT kompiliatoriaus, jame yra abiejų lygių elementai.

Vykdo visus baitekodo sakinius su fiksuota vertėjo kilpa (pvz., „C ++“ vertėjas) ir naudoja vidinius talpyklos metodus, kad pagerintų našumą ir rinktų tipo informaciją (kaip tai daro pagrindinis JIT).

Vertėjo žodžiu generavimas nėra nauja idėja. Bet „Firefox“ komanda čia nurodo, kad rado naują būdą tai padaryti pakartotinai panaudodami didžiąją dalį pagrindinio JIT kompiliatoriaus kodo. Pagrindinis JIT kompiliatorius yra JIT modelis, o tai reiškia, kad kiekviena tarpinė kodo instrukcija yra sukompiliuojama į iš esmės fiksuotą mašinų instrukcijų seką, kurios vėliau yra siūlomos aiškinimo cikle.

Be to, nuo „Firefox“ kūrėjai norėjo, kad bazinis vertėjas naudotų tas pačias internetines talpyklas ir tą pačią informaciją kaip JIT, buvo pridėta nauja duomenų struktūra, vadinama „JitScript“.

„JitScript“ yra visa informacija apie tipą ir įterptosios talpyklos duomenų struktūros, kurias naudoja baziniai vertėjai ir JIT kompiliatorius.

Su šiais naujais diegimais pagrindiniai funkcijos kompiliatoriaus duomenys dabar yra tik mašininiame kode. Iš ten visa talpykloje saugoma informacija ir profiliavimo duomenys buvo perkelti į „JitScript“.

Kita vertus, kadangi pagrindinis vertėjas ir JIT kompiliatorius yra identiški, didžiąją dalį sugeneruoto kodo taip pat galima bendrinti.

Norėdami tai padaryti, buvo sukurta bazinė klasė, vadinama „BaselineCodeGen“, su 2 kitomis išvestinėmis klasėmis. Pagrindinis kompiliatorius naudoja pirmos klasės „BalineCompiler“, kad sukompiliuotų scenarijaus baitų kodą į mašininį kodą.

Antroji „BaselineInterpreterGenerator“ klasė naudojama generuoti pagrindinio vertėjo kodą. „BaselineInterpreterGenerator“ klasėje „Firefox“ komandai pavyko sukurti bazinį vertėją.

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


Būkite pirmas, kuris pakomentuos

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.