A SpiderMonkey JavaScript engine aktuális fejlesztései

kami911 képe

A SpiderMonkey a Mozilla Firefoxban használt JavaScript motor. Ez a hír áttekintést ad arról a JavaScript és WebAssembly munkáról, amelyet a Firefox 110 és 111 Nightly kiadási ciklusok részeként végeztek a fejlesztők.

RISC-V backend

A SpiderMonkey most már rendelkezik egy JIT / Wasm backenddel a 64 bites RISC-V architektúrához! Ez a port a PLCT Lab által lett hozzáadva, és ők fogják karbantartani a jövőben is. Új platformhoz való backend hozzáadása sok munkát igényel, ezért hálásak vagyunk nekik, hogy a SpiderMonkey jól fut ezen az izgalmas új architektúrán. Az új 64-bites RISC-V architektúrára történő portolás új lehetőséget teremt a SpiderMonkey számára, és nagyban hozzájárul a SpiderMonkey futási hatékonyságához. A

Teljesítmény

Dolgoznak a teljesítmény javításán a népszerű webes keretrendszerek, például a React esetében. Nem sorolhatjuk fel az összes ilyen fejlesztést, de az alábbi lista néhány munkát tartalmaz:

  • Hozzáadtak egy optimalizálást az elemhivatkozásokhoz egy for-in hurokban. Ez lehetővé teszi számunkra, hogy elkerüljük a lassabb megamorf tulajdonságok keresését a React és más keretrendszerekben.
  • Tovább optimalizálták a megamorf tulajdonságok eléréseit / beállításait.
  • Tovább optimalizálták az atomizációt annak érdekében, hogy elkerüljük a kötelek lapítását bizonyos esetekben.
  • Több javulást tettünk közzé a GC párhuzamos jelölő megvalósításához. Jelenleg néhány kísérletet végzünk annak értékelésére, hogy mennyire hatékony.
  • Javítottunk néhány teljesítményproblémát az ARM64 gyors utakat illetően a duplák vágása terén.
  • Hozzáadtak néhány gyors utat objektumok / tömbök strukturált klónozásának olvasásához.
  • Támogatást adtunk hozzá, hogy az összehasonlítás típusait hatékonyabban lehet optimalizálni a CacheIR-rel.

JS modulok modernizálása

Dolgoztak a fejlesztők a modulok megvalósításának javításán. Ide tartozik a modulok támogatása a Workers-ben, az Import Maps támogatásának hozzáadása és az ESMification (a JSM modulrendszer Firefox belső JS kódjának standard ECMAScript modulokkal való helyettesítése).

Wasm GC

A Wasm GC (WebAssembly Garbage Collector) projekt célja, hogy a magasabb szintű programozási nyelvek, amelyek a WebAssembly-n keresztül futnak, ne kelljen saját garbage collectorral rendelkezzenek. Ezen nyelvek esetében a WebAssembly nem tudja összegyűjteni a memóriában kialakuló ciklusokat, ami memóriacsökkentő problémákat okozhat.

A SpiderMonkey csapat most azon dolgozik, hogy a Wasm GC-t bevezesse, amely az adatstruktúrák (struct) és tömbök (array) típusát adja hozzá a WebAssembly-hez, hogy azok az adott böngésző garbage collectorjával együtt tudjanak működni.

Az új rendszerhez a csapat a Dart Wasm GC benchmarkot használta, amelynek eredményeit elemzik és javítják a különböző teljesítményproblémákat. Emellett az adatstruktúrák és tömbök allokációját optimalizálták, valamint egy új, konstans idejű algoritmust alkalmaztak a típusok leképezéséhez.

A csapat további jelentős teljesítményjavításokat ért el azáltal, hogy a null pointer ellenőrzések egy részét a signal handler használatával eltávolították, ezáltal hatékonyabbá téve a garbage collectort.

A SpiderMonkey csapat további fejlesztése a jobb gyorsítótár-kezelésre fókuszál. Az új Stencil formátum alapján dolgoznak az in-memory JavaScript scriptek jobb cache-elésén, ami lehetővé teszi a Gecko által használt egyéb erőforrás-gyorsítótárakkal történő jobb integrációt, valamint lehetővé teheti a JIT-specifikus címkék gyorsítótárba helyezését is a jövőben.

Az off-thread parsing függőségének eltávolítása is folyamatban van a JSContext-től. Ez lehetővé teszi a SpiderMonkey csapat számára, hogy jobban integrálják a böngésző háttérben futó folyamatokkal és tovább egyszerűsítsék és optimalizálják a JavaScript motor működését.

Ezen kívül a csapat javította a JIT-folyamatokat követő trampoline kódok annotálását, bevezettek profilozó jeleket a JIT-kódok eldobásához és javítottak néhány devtools problémát is az aszinkron függvények és getterek előtérben történő értékelésével kapcsolatban.

A modulok modernizálása szintén fontos fejlesztés, amely megkönnyíti a fejlesztők dolgát, és jobb kompatibilitást biztosít a különböző modulrendszerrel rendelkező kódok között. A Wasm GC támogatása pedig azoknak a nyelveknek nyújt megoldást, amelyeknek saját GC-jük van, és lehetővé teszi számukra, hogy a böngésző által biztosított GC-t használják.

A SpiderMonkey fejlesztői folyamatosan dolgoznak azon, hogy javítsák az optimalizációt és az in-memory cachingot, és a fejlesztések általában nagyon pozitívak voltak. A Mozilla Firefox és a SpiderMonkey JavaScript engine nagyszerű lehetőségeket kínál a fejlesztők számára, és ezek az új fejlesztések és optimalizációk még inkább javítják a teljesítményt és a hatékonyságot.