Firefox 70 stići će s poboljšanim Javascript interpretatorom

Firefox 70

Opće je poznato da moderne web aplikacije pokreću puno više JavaScript koda nego prije nekoliko godina. Iako su sastavljači brzo slijedili trend i učinili JavaScript učinkovitim, za Mozillu se mora primijeniti rješenje koje će još bolje podnijeti ovo opterećenje.

Da biste to učinili, Mozilla je razvila i dodala novi tumač bajt koda JavaScript na svoj JavaScript mehanizam za prikazivanje ugrađen u Firefox 70. S Firefoxom 70 koji će biti dostupan sljedećeg listopada, Mozilla najavljuje bolje upravljanje JavaScript kodom koristeći svoj novi tumač koda dodan svom JavaScript mehanizmu.

Da bi se postigao ovaj cilj, Mozilla to objašnjava U modernim JavaScript mehanizmima svaka se funkcija u početku izvršava u interpretatoru koda.

Funkcije koje se nazivaju puno sastavljaju se u izvorni strojni kod. To se naziva JIT kompilacija ili kompilacija u letu. Kao Firefox također uključuje tumač JavaScript koda napisan na C ++ i razne razine JIT kompilacije.

Prvo, imamo osnovni JIT kompajler koji kompajlira svaku izjavu bajt koda izravno u mali komad strojnog koda koristeći ugrađeno predmemoriranje za izvedbu i prikupljanje informacija za JIT kompajler zvan IonMonkey ili Ion.

Zauzvrat, prevodilac IonMonkey koristi napredne optimizacije za generiranje brzog koda za kritične opcije.

Treba imati na umu da kada se funkcija koja se već kompilira poziva s novom vrstom argumenta, kôd funkcije može se "deoptimizirati" i odbaciti. U ovom slučaju, izvršenje se nastavlja u osnovnom kodu do sljedeće Ion gradnje.

Iako je ovaj postupak tumačenja JavaScript koda do sada djelovao prilično dobro, tim na Firefox objašnjava da je s prvim naišao na neke probleme dio koju čine tumač C ++ i osnovni JIT prevodilac.

Firefox 70

U stvari, neke moderne web aplikacije poput Google dokumenata ili Gmaila pokrenuti toliko JavaScript da je kompajler baza, pa čak i JIT kompajler mogli bi dugo provoditi pokušavajući sastaviti tisuće funkcija.

Također, tumač C ++ bio je vrlo spor i ne prikuplja informacije o tipu, što odgađa osnovnu kompilaciju. Jedno bi rješenje bilo izvući ga iz niti, ali to bi predstavljalo rizik izvedbe.

Kako bi riješili ove probleme, ljudi iz Mozille komentiraju da:

Osnovni tumač nalazi se između tumača C ++ i osnovnog JIT prevoditelja i sadrži elemente obje razine.

Izvršava sve izjave bajtkoda s fiksnom petljom tumača (poput tumača C ++) i koristi tehnike ugrađenog predmemoriranja za poboljšanje performansi i prikupljanje podataka o tipu (kao što to čini osnovni JIT).

Generiranje prevoditelja nije nova ideja. No, tim Firefoxa ovdje ističe da su pronašli novi način da to učine ponovnom upotrebom većine osnovnog koda JIT prevoditelja. Osnovni JIT kompajler je JIT model, što znači da se svaka naredba srednjeg koda sastavlja u bitno fiksni slijed strojnih uputa koje se zatim predlažu u petlji interpretacije.

Također, od Programeri Firefoxa željeli su da osnovni tumač koristi potpuno iste mrežne predmemorije i iste informacije kao i JIT, dodana je nova struktura podataka nazvana JitScript.

JitScript sadrži sve informacije o tipu i podatkovne strukture ugrađenog predmemoriranja koje koriste osnovni tumači i JIT prevodilac.

S ovim novim implementacijama, osnovni podaci kompajlera za funkciju sada su samo u strojnom kodu. Odatle su sve predmemorirane informacije i podaci profiliranja premješteni na JitScript.

S druge strane, budući da su osnovni tumač i JIT kompajler identični, velik dio generiranog koda također se može dijeliti.

Da bi to učinili, stvorena je osnovna klasa nazvana BaselineCodeGen s još 2 izvedene klase. Osnovni kompajler koristi prvu klasu BalineCompiler za kompajliranje bajtkoda skripte u strojni kod.

Druga klasa BaselineInterpreterGenerator koristi se za generiranje koda za osnovni tumač. A s klasom BaselineInterpreterGenerator, tim Firefoxa uspio je izraditi osnovni tumač.

izvor: https://hacks.mozilla.org/


Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.