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.