Μηχανή JavaScript Hermes ανοιχτού κώδικα του Facebook

Ελαφρύς κινητήρας JavaScript ανοιχτού κώδικα του Facebook Ερμής, βελτιστοποιημένη για εκτέλεση εφαρμογών με βάση το πλαίσιο Απάντηση Native στην πλατφόρμα Android. Ερμής υποστήριξη ενσωματωμένο στο React Native ξεκινώντας με τη σημερινή έκδοση 0.60.2. Το έργο έχει σχεδιαστεί για την επίλυση προβλημάτων με μεγάλους χρόνους εκκίνησης για εγγενείς εφαρμογές JavaScript και σημαντική κατανάλωση πόρων. Κώδικας γραπτός σε C++ και διανέμεται υπό την άδεια MIT.

Μεταξύ των πλεονεκτημάτων της χρήσης Hermes, είναι η μείωση του χρόνου εκκίνησης της εφαρμογής, η μείωση της κατανάλωσης μνήμης και η μείωση του μεγέθους της εφαρμογής. Όταν χρησιμοποιείτε το V8, τα πιο χρονοβόρα στάδια είναι τα στάδια ανάλυσης του πηγαίου κώδικα και μεταγλώττισής του εν κινήσει. Ο Hermes φέρνει αυτά τα βήματα στο στάδιο κατασκευής και επιτρέπει την παράδοση των εφαρμογών με τη μορφή συμπαγούς και αποτελεσματικού bytecode.

Για την άμεση εκτέλεση της εφαρμογής, μια εικονική μηχανή που αναπτύχθηκε στο πλαίσιο του έργου χρησιμοποιείται με τον συλλέκτη σκουπιδιών SemiSpace, ο οποίος διανέμει μπλοκ μόνο όπως απαιτείται (Κατ' απαίτηση), υποστηρίζει τη μετακίνηση και την ανασυγκρότηση μπλοκ, την επιστροφή ελευθερωμένης μνήμης στο λειτουργικό σύστημα, χωρίς περιοδικά σάρωση του περιεχομένου ολόκληρου του σωρού.

Η επεξεργασία JavaScript χωρίζεται σε διάφορα στάδια. Αρχικά, τα κείμενα πηγής αναλύονται και δημιουργείται μια ενδιάμεση αναπαράσταση του κώδικα (Ερμής IR), με βάση την αναπαράσταση SSA (Στατική Ενιαία Ανάθεση). Στη συνέχεια, η ενδιάμεση αναπαράσταση επεξεργάζεται σε έναν βελτιστοποιητή, ο οποίος εφαρμόζει τεχνικές στατικής βελτιστοποίησης για να μετατρέψει τον πρωτεύοντα ενδιάμεσο κώδικα σε μια πιο αποτελεσματική ενδιάμεση αναπαράσταση διατηρώντας παράλληλα την αρχική σημασιολογία του προγράμματος. Στο τελευταίο στάδιο, δημιουργείται ο bytecode για την καταχωρημένη εικονική μηχανή.

Στον κινητήρα υποστηριζόμενο από μέρος του προτύπου JavaScript ECMAScript 2015 (απώτερος στόχος είναι η πλήρης υποστήριξή του) και παρέχει συμβατότητα με τις περισσότερες υπάρχουσες εφαρμογές React Native. Η Hermes αποφάσισε να μην υποστηρίξει την τοπική εκτέλεση του eval(), με δηλώσεις, προβληματισμό (Reflect και Proxy), Intl API και ορισμένες σημαίες στο RegExp. Για να ενεργοποιήσετε τον Hermes σε μια εφαρμογή React Native, απλώς προσθέστε την επιλογή "enableHermes: true" στο έργο. Είναι επίσης δυνατή η κατασκευή του Hermes σε λειτουργία CLI, επιτρέποντάς σας να εκτελείτε αυθαίρετα αρχεία JavaScript από τη γραμμή εντολών. Μια λειτουργία τεμπέλης μεταγλώττισης είναι διαθέσιμη για εντοπισμό σφαλμάτων, η οποία σας επιτρέπει να μην μεταγλωττίζετε JavaScript κάθε φορά κατά τη διάρκεια της διαδικασίας ανάπτυξης, αλλά να δημιουργείτε bytecode on the fly ήδη στη συσκευή.

Ταυτόχρονα, το Facebook δεν σχεδιάζει να προσαρμόσει τον Hermes για το Node.js και άλλες λύσεις, εστιάζοντας μόνο σε εφαρμογές για κινητά (η μεταγλώττιση AOT αντί για JIT είναι η βέλτιστη στο πλαίσιο συστημάτων κινητής τηλεφωνίας, που έχουν περιορισμένη μνήμη RAM και πιο αργό Flash). Προκαταρκτική δοκιμή απόδοσης που διενεργήθηκε από υπαλλήλους της Microsoft αποκάλυψεότι όταν χρησιμοποιείτε το Hermes, η εφαρμογή Microsoft Office για Android γίνεται διαθέσιμη για χρήση σε 1.1 δευτερόλεπτα. μετά την εκκίνηση και καταναλώνει 21.5 MB μνήμης RAM, ενώ κατά τη χρήση του κινητήρα V8 χρειάζεται 1.4 δευτερόλεπτα για να ξεκινήσει και η κατανάλωση μνήμης είναι 30 MB.

Προσθήκη: Facebook δημοσιεύεται δικά τους αποτελέσματα δοκιμών. Κατά τη χρήση του Hermes με την εφαρμογή MatterMost, ο χρόνος έναρξης της διαθεσιμότητας για εργασία (TTI, Time To Interact) μειώθηκε από 4.30 σε 2.01 δευτερόλεπτα, το μέγεθος του πακέτου APK μειώθηκε από 41 σε 22 MB και η κατανάλωση μνήμης από 185 σε 136 MB.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο