Facebook-ийн нээлттэй эх сурвалжтай Hermes JavaScript хөдөлгүүр

Facebook нээлттэй эх сурвалжтай хөнгөн жинтэй JavaScript хөдөлгүүр Гермес, хүрээн дээр суурилсан програмуудыг ажиллуулахад оновчтой болгосон Уугуул хариу өгөх Android платформ дээр. Гермесийн дэмжлэг суурилуулсан React Native-д өнөөдрийн 0.60.2 хувилбараас эхлэн. Энэхүү төсөл нь эх JavaScript программуудыг эхлүүлэх урт хугацаа, их хэмжээний нөөцийн зарцуулалт зэрэг асуудлыг шийдвэрлэх зорилготой юм. Код бичсэн C++ хэл дээр, MIT лицензийн дагуу түгээгддэг.

Hermes-ийг ашиглахын давуу талуудын дунд програмыг эхлүүлэх хугацаа багасч, санах ойн хэрэглээ багасч, програмын хэмжээ багасдаг. V8-г ашиглах үед хамгийн их цаг хугацаа шаардсан үе шатууд нь эх кодыг задлан шинжилж, шууд хөрвүүлэх үе шатууд юм. Гермес эдгээр алхмуудыг бүтээх шатанд хүргэж, програмуудыг авсаархан, үр ашигтай байт код хэлбэрээр хүргэх боломжийг олгодог.

Програмыг шууд ажиллуулахын тулд төслийн хүрээнд боловсруулсан виртуал машиныг SemiSpace хог цуглуулагчтай хамт ашигладаг бөгөөд энэ нь зөвхөн блокуудыг шаардлагатай үед (хүсэлтээр) тарааж, блокуудыг шилжүүлэх, дефрагментаци хийх, суллагдсан санах ойг үйлдлийн систем рүү буцаах, үе үе ашиглахгүйгээр ашиглах боломжийг олгодог. овоолгын агуулгыг бүхэлд нь сканнердах.

JavaScript боловсруулалтыг хэд хэдэн үе шатанд хуваадаг. Эхлээд эх бичвэрүүдийг задлан шинжилж, кодын завсрын дүрслэлийг үүсгэнэ (Гермес IR), төлөөлөл дээр үндэслэн SSA (Статик ганц даалгавар). Дараа нь завсрын дүрслэлийг оновчтой болгох төхөөрөмжид боловсруулдаг бөгөөд энэ нь програмын анхны утгыг хадгалахын зэрэгцээ анхдагч завсрын кодыг илүү үр дүнтэй завсрын дүрс болгон хувиргахын тулд урагшлах статик оновчлолын техникийг ашигладаг. Сүүлийн шатанд бүртгэгдсэн виртуал машины байт кодыг үүсгэнэ.

Хөдөлгүүрт дэмждэг ECMAScript 2015 JavaScript стандартын нэг хэсэг (эцсийн зорилго нь үүнийг бүрэн дэмжих явдал юм) бөгөөд одоо байгаа ихэнх React Native програмуудтай нийцтэй байдлыг хангадаг. Hermes нь eval(), мэдэгдэл, тусгал (Reflect and Proxy), Intl API болон RegExp дахь зарим тугуудыг орон нутгийн гүйцэтгэлд дэмжихгүй байхаар шийдсэн. React Native програм дээр Hermes-ийг идэвхжүүлэхийн тулд төсөлд "enableHermes: true" сонголтыг нэмэхэд л хангалттай. Мөн Hermes-ийг CLI горимд бүтээх боломжтой бөгөөд энэ нь тушаалын мөрөөс дурын JavaScript файлуудыг ажиллуулах боломжийг олгодог. Залхуу эмхэтгэлийн горим нь дибаг хийх боломжтой бөгөөд энэ нь хөгжүүлэлтийн явцад JavaScript-г эмхэтгэхгүй, харин төхөөрөмж дээр аль хэдийн байт код үүсгэх боломжийг олгодог.

Үүний зэрэгцээ Facebook нь Hermes-ийг Node.js болон бусад шийдлүүдэд дасан зохицохоор төлөвлөөгүй бөгөөд зөвхөн гар утасны хэрэглээнд анхаарлаа хандуулдаг (JIT-ийн оронд AOT эмхэтгэл нь хязгаарлагдмал RAM болон удаан Flash-тэй гар утасны системийн нөхцөлд хамгийн оновчтой байдаг). Майкрософт компанийн ажилтнуудын хийсэн гүйцэтгэлийн урьдчилсан туршилт харуулсанHermes-ийг ашиглах үед Android-д зориулсан Microsoft Office програмыг 1.1 секундын дотор ашиглах боломжтой болно. эхлүүлсний дараа 21.5MB RAM зарцуулдаг бол V8 хөдөлгүүрийг ашиглах үед эхлүүлэхэд 1.4 секунд шаардлагатай бөгөөд санах ойн зарцуулалт 30MB байна.

Нэмэлт: Facebook Нийтлэгдсэн өөрийн туршилтын үр дүн. Hermes-ийг MatterMost програмтай ашиглах үед ажилд орох боломжтой байх хугацаа (TTI, Харилцах хугацаа) 4.30-аас 2.01 секунд болж, APK багцын хэмжээ 41-ээс 22 МБ болж, санах ойн зарцуулалт 185-аас 136 болж буурчээ. МБ.

Эх сурвалж: opennet.ru

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