Cloudflare, Mozilla болон Facebook нь JavaScript ачааллыг хурдасгахын тулд BinaryAST програмыг хөгжүүлдэг

Cloudflare, Mozilla, Facebook, Bloomberg-ийн инженерүүд санал болгосон шинэ формат хоёртын AST хөтөч дээр сайт нээх үед JavaScript кодыг хүргэх, боловсруулах ажлыг хурдасгах. BinaryAST нь задлан шинжлэх үеийг сервер тал руу шилжүүлж, аль хэдийн үүсгэсэн хийсвэр синтакс модыг нийлүүлдэг (AST). BinaryAST-г хүлээн авмагц хөтөч JavaScript-ийн эх кодыг задлан шинжлэхгүйгээр шууд эмхэтгэлийн үе шат руу шилжиж болно.

Туршилтын хувьд бэлтгэсэн MIT лицензийн дагуу нийлүүлсэн лавлагааны хэрэгжилт. Node.js бүрэлдэхүүн хэсгүүдийг задлан шинжлэхэд ашигладаг бөгөөд оновчлол болон AST үүсгэх кодыг Rust дээр бичсэн. Хөтөч талын дэмжлэг
BinaryAST аль хэдийн боломжтой шөнийн бүтээн байгуулалтууд Firefox. BinaryAST дахь кодлогчийг сайтын төгсгөлийн хэрэгслийн түвшинд болон прокси эсвэл контент дамжуулах сүлжээний тал дээр гадны сайтуудын скриптийг савлахад ашиглаж болно. Одоогийн байдлаар ажлын хэсэг BinaryAST-ыг стандартчилах үйл явц аль хэдийн эхэлсэн байна ECMA TC39, үүний дараа формат нь gzip болон brotli гэх мэт агуулгыг шахах аргуудтай зэрэгцэн орших боломжтой болно.

Cloudflare, Mozilla болон Facebook нь JavaScript ачааллыг хурдасгахын тулд BinaryAST програмыг хөгжүүлдэг

Cloudflare, Mozilla болон Facebook нь JavaScript ачааллыг хурдасгахын тулд 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

сэтгэгдэл нэмэх