Inxhinierë nga Cloudflare, Mozilla, Facebook dhe Bloomberg
Për testimin
BinaryAST është tashmë i disponueshëm në
Një kohë e konsiderueshme në përpunimin JavaScript merret nga faza e ngarkimit dhe analizimit të kodit. Duke marrë parasysh që sasia e JavaScript e shkarkuar në shumë site të njohura po i afrohet 10 MB (për shembull, për LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), përpunimi fillestar i JavaScript sjell një vonesë të konsiderueshme. Faza e analizimit në anën e shfletuesit është gjithashtu ngadalësuar për shkak të pamundësisë së ndërtimit të plotë të AST-it në fluturim ndërsa kodi ngarkohet (shfletuesi duhet të presë që blloqet e kodit të mbarojnë ngarkimin, për shembull, fundi i funksioneve, në në mënyrë që të merrni informacionin që mungon për të analizuar elementet aktuale).
Pjesërisht, ata përpiqen ta zgjidhin problemin duke shpërndarë kodin në një formë të minimizuar dhe të ngjeshur, si dhe duke ruajtur memorien e bajtkodit të gjeneruar nga shfletuesi. Në faqet moderne, kodi azhurnohet mjaft shpesh, kështu që ruajtja në memorie vetëm pjesërisht e zgjidh problemin. WebAssembly mund të jetë zgjidhja, por kërkon përdorimin e shtypjes së qartë të kodit dhe nuk është i përshtatshëm për përshpejtimin e përpunimit të kodit tashmë ekzistues JavaScript.
Një opsion tjetër është dërgimi i bytekodit të para-përpiluar në vend të skripteve JavaScript, por zhvilluesit e motorëve të shfletuesit janë kundër sepse bytekodi i palëve të treta është i vështirë për t'u verifikuar, përpunimi i tij i drejtpërdrejtë mund të çojë në shtresim në ueb, lindin rreziqe shtesë të sigurisë dhe zhvillimin e një kodi universal. Kërkohet formati i bytekodit.
BinaryAST ju lejon të përshtateni në modelin aktual të zhvillimit dhe shpërndarjes së kodit pa krijuar bajtkod të ri dhe pa ndryshuar gjuhën JavaScript. Madhësia e të dhënave në formatin BinaryAST është e krahasueshme me kodin e ngjeshur të minifikuar të JavaScript, dhe shpejtësia e përpunimit është rritur ndjeshëm për shkak të përjashtimit të fazës së analizimit të kodit burimor. Për më tepër, formati lejon përpilimin në bajtkod ndërsa ngarkohet BinaryAST, pa pritur që të gjitha të dhënat të merren. Për më tepër, analizimi në anën e serverit ju lejon të përjashtoni funksionet e papërdorura dhe kodin shtesë nga përfaqësimi i kthyer BinaryAST, i cili, kur analizohet në anën e shfletuesit, kërkon kohë për të analizuar dhe për të transmetuar trafik shtesë.
Një veçori e BinaryAST është gjithashtu aftësia për të rivendosur JavaScript të lexueshme që nuk përputhet me versionin origjinal, por është semantikisht ekuivalent dhe përfshin të njëjtat emra të variablave dhe funksioneve (BinaryAST ruan emrat, por nuk ruan informacione për pozicionet në kod, formatimin dhe komentet). Ana tjetër e medaljes është shfaqja e vektorëve të rinj të sulmit, por sipas zhvilluesve, ata janë shumë më të vegjël dhe më të kontrollueshëm se alternativat si shpërndarja e bytekodit.
Testet e kodit të Facebook.com kanë treguar se 10-15% e burimeve të CPU-së shpenzohen për analizimin e JavaScript dhe analizimi kërkon më shumë kohë sesa gjenerimi i bytekodit dhe gjenerimi fillestar i kodit për JIT. Në motorin SpiderMonkey, koha për të përfunduar ndërtimin e AST merr 500-800 ms, dhe përdorimi i BinaryAST e zvogëloi këtë shifër me 70-90%.
Në përgjithësi, për shumicën e fishekzjarreve në ueb, kur përdorni BinaryAST, koha e analizimit të JavaScript zvogëlohet me 3-10% në modalitetin pa optimizim dhe me 90-97% kur aktivizohet mënyra e injorimit të funksioneve të papërdorura.
Gjatë ekzekutimit të një grupi testimi JavaScript 1.2 MB, përdorimi i BinaryAST përshpejtoi kohën e nisjes nga 338 në 314 ms në një sistem desktop (Intel i7) dhe nga 2019 në 1455 ms në një pajisje celulare (HTC One M8).
Burimi: opennet.ru