Mae Cloudflare, Mozilla a Facebook yn datblygu BinaryAST i gyflymu llwytho JavaScript

Peirianwyr o Cloudflare, Mozilla, Facebook a Bloomberg arfaethedig fformat newydd Deuaidd i gyflymu cyflwyno a phrosesu cod JavaScript wrth agor gwefannau yn y porwr. Mae BinaryAST yn symud y cyfnod dosrannu i ochr y gweinydd ac yn cyflenwi coeden gystrawen haniaethol a gynhyrchwyd eisoes (AST). Ar ôl derbyn BinaryAST, gall y porwr symud ymlaen ar unwaith i'r cam llunio, gan osgoi dosrannu cod ffynhonnell JavaScript.

Ar gyfer profi parod gweithredu cyfeirnod a ddarparwyd o dan y drwydded MIT. Defnyddir cydrannau Node.js ar gyfer dosrannu, ac mae'r cod ar gyfer optimeiddio a chynhyrchu AST wedi'i ysgrifennu yn Rust. Cefnogaeth ochr porwr
Mae BinaryAST eisoes ar gael yn cynulliad nos Firefox. Gellir defnyddio'r amgodiwr yn BinaryAST ar lefel offer y wefan derfynol ac ar gyfer pecynnu sgriptiau gwefannau allanol ar ochr rhwydwaith dirprwy neu rwydwaith darparu cynnwys. Ar hyn o bryd, mae'r broses o safoni BinaryAST gan y gweithgor eisoes wedi dechrau ECMA TC39, ac ar ôl hynny bydd y fformat yn gallu cydfodoli â dulliau cywasgu cynnwys presennol, megis gzip a brotli.

Mae Cloudflare, Mozilla a Facebook yn datblygu BinaryAST i gyflymu llwytho JavaScript

Mae Cloudflare, Mozilla a Facebook yn datblygu BinaryAST i gyflymu llwytho JavaScript

Wrth brosesu JavaScript, treulir cryn dipyn o amser yng nghyfnod llwytho a dosrannu'r cod. O ystyried bod nifer y JavaScript wedi'i lawrlwytho ar lawer o wefannau poblogaidd yn agos at 10 MB (er enghraifft, ar gyfer LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), mae prosesu cychwynnol JavaScript yn cyflwyno oedi sylweddol. Mae'r cam dosrannu ar ochr y porwr hefyd yn cael ei arafu oherwydd anallu i adeiladu'r AST yn llawn ar y hedfan wrth i'r cod gael ei lwytho (rhaid i'r porwr aros i flociau cod gwblhau'r llwytho, megis diwedd swyddogaethau, i'w gael y wybodaeth sydd ar goll i ddosrannu'r elfennau cyfredol).

Maent yn ceisio datrys y broblem yn rhannol trwy ddosbarthu'r cod ar ffurf wedi'i leihau a'i gywasgu, yn ogystal â thrwy gadw'r cod byte a gynhyrchir gan y porwr. Ar safleoedd modern, mae'r cod yn cael ei ddiweddaru'n eithaf aml, felly dim ond yn rhannol y mae caching yn datrys y broblem. Gallai WebAssembly fod yn ateb, ond mae angen teipio'r cod yn benodol ac nid yw'n addas iawn ar gyfer cyflymu'r gwaith o brosesu'r cod JavaScript presennol.

Opsiwn arall yw darparu bytecode parod parod yn lle sgriptiau JavaScript, ond mae datblygwyr peiriannau porwr yn ei erbyn oherwydd ei bod yn anodd gwirio cod beit trydydd parti, gall ei brosesu'n uniongyrchol arwain at haenu Gwe, mae risgiau diogelwch ychwanegol yn codi, a datblygiad o mae angen fformat bytecode cyffredinol.

Mae BinaryAST yn caniatáu ichi ffitio i mewn i'ch model datblygu a chyflwyno cod cyfredol heb greu bytecode newydd na newid yr iaith JavaScript. Mae maint y data yn y fformat BinaryAST yn debyg i god JavaScript miniedig cywasgedig, ac mae'r cyflymder prosesu trwy ddileu'r cyfnod dosrannu testun ffynhonnell yn cynyddu'n amlwg. Yn ogystal, mae'r fformat yn caniatáu casglu beitcode wrth i BinaryAST gael ei lwytho, heb aros i'r holl ddata gael ei gwblhau. Yn ogystal, mae dosrannu ar ochr y gweinydd yn caniatáu ichi eithrio swyddogaethau nas defnyddiwyd a chod diangen o'r gynrychiolaeth BinaryAST a ddychwelwyd, sydd, wrth ddosrannu ar ochr y porwr, yn gwastraffu amser yn dosrannu ac yn trosglwyddo traffig diangen.

Nodwedd o BinaryAST hefyd yw'r gallu i adfer JavaScript darllenadwy nad yw'n union yr un fath â'r fersiwn wreiddiol, ond sy'n cyfateb yn semantig ac sy'n cynnwys yr un enwau newidynnau a swyddogaethau (mae BinaryAST yn arbed enwau, ond nid yw'n arbed gwybodaeth am swyddi yn y cod, fformatio a sylwadau). Ochr arall y darn arian yw ymddangosiad fectorau ymosodiad newydd, ond yn ôl y datblygwyr, maent yn llawer llai ac yn fwy rheoladwy nag wrth ddefnyddio dewisiadau amgen, megis dosbarthiad bytecode.

Dangosodd profion o god facebook.com fod dosrannu JavaScript yn defnyddio 10-15% o adnoddau CPU ac mae dosrannu yn cymryd mwy o amser na chynhyrchu bytecode a chynhyrchu cod cychwynnol ar gyfer JIT. Yn yr injan SpiderMonkey, mae'r amser i adeiladu AST yn llwyr yn cymryd 500-800 ms, ac mae defnyddio BinaryAST wedi lleihau'r ffigur hwn 70-90%.
Yn gyffredinol, ar gyfer y rhan fwyaf o dân gwyllt gwe, wrth ddefnyddio BinaryAST, mae amser dosrannu JavaScript yn cael ei leihau 3-10% yn y modd heb optimeiddio a 90-97% pan fydd y modd anwybyddu swyddogaethau nas defnyddiwyd yn cael ei alluogi.
Wrth redeg set prawf JavaScript 1.2 MB, roedd defnyddio BinaryAST yn caniatáu i'r amser cychwyn gyflymu o 338 i 314 ms ar system bwrdd gwaith (Intel i7) ac o 2019 i 1455 ms ar ddyfais symudol (HTC One M8).

Ffynhonnell: opennet.ru

Ychwanegu sylw