เอ็นจิ้น Hermes JavaScript โอเพ่นซอร์สของ Facebook

เอ็นจิ้น JavaScript แบบโอเพ่นซอร์สน้ำหนักเบาของ Facebook Hermesปรับให้เหมาะสมสำหรับการรันแอปพลิเคชันตามเฟรมเวิร์ก ทำปฏิกิริยาพื้นเมือง บนแพลตฟอร์ม Android เฮอร์มีสสนับสนุน ในตัว ใน React Native เริ่มต้นด้วยการเปิดตัว 0.60.2 วันนี้ โปรเจ็กต์นี้ออกแบบมาเพื่อแก้ไขปัญหาเกี่ยวกับเวลาเริ่มต้นที่ยาวนานสำหรับแอปพลิเคชัน JavaScript ดั้งเดิมและการใช้ทรัพยากรจำนวนมาก รหัส เขียนโดย ในภาษา C++ และเผยแพร่ภายใต้ลิขสิทธิ์ MIT

ข้อดีของการใช้ Hermes คือการลดเวลาในการเริ่มต้นแอปพลิเคชัน การใช้หน่วยความจำลดลง และขนาดแอปพลิเคชันที่ลดลง เมื่อใช้ V8 ขั้นตอนที่ใช้เวลานานที่สุดคือขั้นตอนการแยกวิเคราะห์ซอร์สโค้ดและคอมไพล์ทันที Hermes นำขั้นตอนเหล่านี้มาสู่ขั้นตอนการสร้าง และช่วยให้สามารถส่งมอบแอปพลิเคชันในรูปแบบของไบต์โค้ดที่มีขนาดกะทัดรัดและมีประสิทธิภาพ

เพื่อรันแอปพลิเคชันโดยตรง เครื่องเสมือนที่พัฒนาภายในโปรเจ็กต์จะถูกใช้กับตัวรวบรวมขยะ SemiSpace ซึ่งกระจายบล็อกตามต้องการเท่านั้น (ตามความต้องการ) รองรับการเคลื่อนย้ายและการจัดเรียงข้อมูลของบล็อก คืนหน่วยความจำที่ว่างให้กับระบบปฏิบัติการ โดยไม่ต้องเป็นระยะ ๆ การสแกนเนื้อหาของฮีปทั้งหมด

การประมวลผล JavaScript แบ่งออกเป็นหลายขั้นตอน ขั้นแรก ข้อความต้นฉบับจะถูกแยกวิเคราะห์ และสร้างการแสดงโค้ดระดับกลาง (เฮอร์มีส ไออาร์) ขึ้นอยู่กับการเป็นตัวแทน SSA (การมอบหมายงานเดี่ยวแบบคงที่) ถัดไป การแสดงระดับกลางจะถูกประมวลผลในเครื่องมือเพิ่มประสิทธิภาพ ซึ่งใช้เทคนิคการปรับให้เหมาะสมแบบคงที่ไปข้างหน้าเพื่อแปลงโค้ดระดับกลางหลักให้เป็นการแสดงระดับกลางที่มีประสิทธิภาพมากขึ้น ในขณะที่ยังคงรักษาความหมายดั้งเดิมของโปรแกรมไว้ ในขั้นตอนสุดท้าย รหัสไบต์สำหรับเครื่องเสมือนที่ลงทะเบียนจะถูกสร้างขึ้น

ในเครื่องยนต์ สนับสนุนโดย เป็นส่วนหนึ่งของมาตรฐาน ECMAScript 2015 JavaScript (เป้าหมายสูงสุดคือการรองรับอย่างเต็มที่) และให้ความเข้ากันได้กับแอปพลิเคชัน React Native ที่มีอยู่ส่วนใหญ่ Hermes ได้ตัดสินใจที่จะไม่สนับสนุนการดำเนินการ eval() ในเครื่อง พร้อมด้วยคำสั่ง การสะท้อน (Reflect และ Proxy) Intl API และแฟล็กบางส่วนใน RegExp หากต้องการเปิดใช้งาน Hermes ในแอปพลิเคชัน React Native เพียงเพิ่มตัวเลือก “enableHermes: true” ให้กับโปรเจ็กต์ นอกจากนี้ยังสามารถสร้าง Hermes ในโหมด CLI ได้ด้วย ซึ่งช่วยให้คุณสามารถเรียกใช้งานไฟล์ JavaScript ที่กำหนดเองจากบรรทัดคำสั่งได้ โหมดการคอมไพล์แบบ Lazy พร้อมใช้งานสำหรับการดีบัก ซึ่งช่วยให้คุณไม่ต้องคอมไพล์ JavaScript ทุกครั้งในระหว่างกระบวนการพัฒนา แต่เพื่อสร้างโค้ดไบต์ได้ทันทีบนอุปกรณ์

ในเวลาเดียวกัน Facebook ไม่ได้วางแผนที่จะปรับใช้ Hermes สำหรับ Node.js และโซลูชันอื่น ๆ โดยเน้นเฉพาะแอปพลิเคชันมือถือ (การคอมไพล์ AOT แทน JIT นั้นเหมาะสมที่สุดในบริบทของระบบมือถือซึ่งมี RAM จำกัด และ Flash ที่ช้ากว่า) การทดสอบประสิทธิภาพเบื้องต้นดำเนินการโดยพนักงาน Microsoft เปิดเผยว่าเมื่อใช้ Hermes แอปพลิเคชัน Microsoft Office สำหรับ Android จะพร้อมใช้งานภายใน 1.1 วินาที หลังจากเริ่มต้นและใช้ RAM 21.5MB ในขณะที่เมื่อใช้เอนจิ้น V8 จะใช้เวลา 1.4 วินาทีในการเริ่มต้นและใช้หน่วยความจำ 30MB

นอกจากนี้: เฟสบุ๊ค ตีพิมพ์ ผลการทดสอบของตัวเอง เมื่อใช้ Hermes กับแอปพลิเคชัน MatterMost เวลาในการเริ่มทำงาน (TTI, Time To Interact) ลดลงจาก 4.30 เป็น 2.01 วินาที ขนาดของแพ็คเกจ APK ลดลงจาก 41 เป็น 22 MB และการใช้หน่วยความจำจาก 185 เป็น 136 เอ็มบี

ที่มา: opennet.ru

เพิ่มความคิดเห็น