Cloudflare, Mozilla, Facebook, Bloomberg-ийн инженерүүд
Туршилтын хувьд
BinaryAST аль хэдийн боломжтой
JavaScript-г боловсруулахдаа кодыг ачаалах, задлан шинжлэх үе шатанд ихээхэн цаг зарцуулдаг. Олон алдартай сайтууд дээр татаж авсан JavaScript-ийн хэмжээ 10 МБ (жишээлбэл, LinkedIn - 7.2 МБ, Facebook - 7.1 МБ, Gmail - 3.9 МБ) дөхөж байгааг харгалзан үзвэл JavaScript-ийн анхны боловсруулалт ихээхэн саатдаг. Кодыг ачаалж байх үед AST-ийг бүрэн бүтээх боломжгүйгээс болж хөтчийн тал дахь задлан шинжлэх үе шат удааширч байна (хөтөч нь функцын төгсгөл гэх мэт код блокуудыг ачаалж дуустал хүлээх шаардлагатай болдог. одоогийн элементүүдийг задлан шинжлэхэд дутуу мэдээлэл).
Тэд кодыг багасгасан, шахсан хэлбэрээр түгээх, мөн үүсгэсэн байт кодыг хөтөчөөр кэшлэх замаар асуудлыг хэсэгчлэн шийдвэрлэхийг оролдож байна. Орчин үеийн сайтууд дээр кодыг байнга шинэчилдэг тул кэш нь асуудлыг хэсэгчлэн шийддэг. WebAssembly нь шийдэл байж болох ч энэ нь кодыг тодорхой бичих шаардлагатай бөгөөд одоо байгаа JavaScript кодыг боловсруулахад тийм ч тохиромжтой биш юм.
Өөр нэг сонголт бол JavaScript скриптийн оронд бэлэн эмхэтгэсэн байт кодыг хүргэх боловч гуравдагч этгээдийн байт кодыг шалгахад хэцүү, шууд боловсруулалт нь вэб давхаргажилтад хүргэж, аюулгүй байдлын нэмэлт эрсдэлүүд үүсэхэд хүргэдэг тул хөтөчийн хөдөлгүүр хөгжүүлэгчид үүнийг эсэргүүцэж байна. бүх нийтийн байт кодын формат шаардлагатай.
BinaryAST нь танд шинэ байт код үүсгэх эсвэл JavaScript хэлийг өөрчлөхгүйгээр одоогийн код боловсруулах, хүргэх загварт тохирох боломжийг олгодог. BinaryAST формат дахь өгөгдлийн хэмжээ нь шахсан JavaScript кодтой харьцуулах боломжтой бөгөөд эх текстийг задлан шинжлэх үе шатыг арилгаснаар боловсруулах хурд мэдэгдэхүйц нэмэгддэг. Нэмж дурдахад, формат нь BinaryAST ачаалагдсан үед бүх өгөгдлийг дуусгахыг хүлээлгүйгээр байт кодлох боломжийг олгодог. Нэмж дурдахад сервер тал дээр задлан шинжлэх нь ашиглагдаагүй функцууд болон шаардлагагүй кодыг буцаасан BinaryAST дүрслэлээс хасах боломжийг олгодог бөгөөд энэ нь хөтчийн тал дээр задлан шинжлэхэд шаардлагагүй урсгалыг задлан шинжлэх, дамжуулахад цаг хугацаа алддаг.
BinaryAST-ийн нэг онцлог нь унших боломжтой JavaScript-г сэргээх боломжтой бөгөөд энэ нь анхны хувилбартай яг адилхан биш боловч утгын хувьд тэнцүү бөгөөд хувьсагч, функцүүдийн ижил нэрийг агуулдаг (BinaryAST нь нэрсийг хадгалдаг боловч файл дахь байршлын мэдээллийг хадгалдаггүй) юм. код, формат, тайлбар). Зоосны нөгөө тал нь довтолгооны шинэ векторууд гарч ирж байгаа боловч хөгжүүлэгчдийн үзэж байгаагаар тэдгээр нь байт кодын хуваарилалт гэх мэт хувилбаруудыг ашиглахаас хамаагүй бага бөгөөд илүү хяналттай байдаг.
Facebook.com кодын туршилтууд нь JavaScript-г задлан шинжлэхэд CPU-ийн нөөцийн 10-15%-ийг зарцуулдаг бөгөөд задлан шинжлэх нь JIT-д байт код болон анхны код үүсгэхээс илүү их цаг зарцуулдаг болохыг харуулсан. SpiderMonkey хөдөлгүүрт AST-ийг бүрэн бүтээх хугацаа нь 500-800 мс, BinaryAST ашиглах нь энэ үзүүлэлтийг 70-90% -иар бууруулсан.
Ерөнхийдөө ихэнх вэб салютуудын хувьд BinaryAST ашиглах үед JavaScript задлан задлах хугацаа оновчлолгүй горимд 3-10%, ашиглагдаагүй функцүүдийг үл тоомсорлох горим идэвхжсэн үед 90-97% буурдаг.
1.2 МБ JavaScript тестийн багцыг ажиллуулахдаа BinaryAST-ыг ашигласнаар эхлүүлэх хугацааг ширээний систем (Intel i338) дээр 314-аас 7 мс, хөдөлгөөнт төхөөрөмж (HTC One M2019) дээр 1455-ээс 8 мс хүртэл хурдасгах боломжийг олгосон.
Эх сурвалж: opennet.ru