Ελαφριά μηχανή JavaScript ανοιχτού κώδικα Facebook , βελτιστοποιημένο για την εκτέλεση εφαρμογών που βασίζονται στο πλαίσιο στην πλατφόρμα AndroidΥποστηρίξτε τον Ερμή στο React Native ξεκινώντας από τη σημερινή έκδοση 0.60.2. Το έργο στοχεύει στην επίλυση προβλημάτων με μεγάλους χρόνους εκκίνησης των εγγενών εφαρμογών JavaScript και σημαντική κατανάλωση πόρων. Κώδικας γραμμένο σε C++ και διανέμεται με την άδεια MIT.
Τα πλεονεκτήματα της χρήσης του Hermes περιλαμβάνουν τον μειωμένο χρόνο εκκίνησης της εφαρμογής, τη μειωμένη κατανάλωση μνήμης και το μειωμένο μέγεθος της εφαρμογής. Όταν χρησιμοποιείται το V8, τα μεγαλύτερα στάδια είναι η ανάλυση του πηγαίου κώδικα και η άμεση μεταγλώττιση. Το Hermes μετακινεί αυτά τα στάδια στο στάδιο κατασκευής και επιτρέπει την παράδοση των εφαρμογών με τη μορφή συμπαγούς και αποδοτικού bytecode.
Για την άμεση εκτέλεση της εφαρμογής, χρησιμοποιείται μια εικονική μηχανή με τον συλλέκτη απορριμμάτων SemiSpace που αναπτύχθηκε στο πλαίσιο του έργου, ο οποίος διανέμει μπλοκ μόνο όταν είναι απαραίτητο (On-demand), υποστηρίζει την κίνηση και την ανασυγκρότηση μπλοκ με την επιστροφή της απελευθερωμένης μνήμης στο λειτουργικό σύστημα και χωρίς περιοδική σάρωση του περιεχομένου ολόκληρου του σωρού.
Η επεξεργασία JavaScript χωρίζεται σε διάφορα στάδια. Αρχικά, τα κείμενα πηγής αναλύονται και δημιουργείται μια ενδιάμεση αναπαράσταση του κώδικα (), με βάση την αναπαράσταση (Στατική Μοναδική Ανάθεση). Στη συνέχεια, η ενδιάμεση αναπαράσταση υποβάλλεται σε επεξεργασία στον βελτιστοποιητή, ο οποίος εφαρμόζει τεχνικές προγνωστικής στατικής βελτιστοποίησης για να μετασχηματίσει τον πρωτεύοντα ενδιάμεσο κώδικα σε μια πιο αποτελεσματική ενδιάμεση αναπαράσταση, διατηρώντας παράλληλα την αρχική σημασιολογία του προγράμματος. Στο τελευταίο στάδιο, δημιουργείται bytecode για την εικονική μηχανή καταχωρητή.
Στον κινητήρα μέρος του προτύπου JavaScript ECMAScript 2015 (με απώτερο στόχο την πλήρη υποστήριξή του) και διασφαλίζει τη συμβατότητα με τις περισσότερες υπάρχουσες εφαρμογές React Native. Το Hermes έχει αποφασιστεί να μην υποστηρίζει την τοπική εκτέλεση eval(), με εκφράσεις, αντανάκλαση (Reflect και Proxy), Intl API και ορισμένες σημαίες στο RegExp. Για να ενεργοποιήσετε το Hermes σε μια εφαρμογή React Native, απλώς προσθέστε την επιλογή "enableHermes: true" στο έργο. Είναι επίσης δυνατή η δημιουργία του Hermes σε λειτουργία CLI, επιτρέποντάς σας να εκτελείτε αυθαίρετα αρχεία JavaScript από τη γραμμή εντολών. Για τον εντοπισμό σφαλμάτων, είναι διαθέσιμη μια λειτουργία lazy compilation, η οποία σας επιτρέπει να δημιουργείτε bytecode εν κινήσει στη συσκευή αντί να μεταγλωττίζετε JavaScript κάθε φορά κατά την ανάπτυξη.
Ταυτόχρονα, το 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, Χρόνος Αλληλεπίδρασης) μειώθηκε από 4.30 σε 2.01 δευτερόλεπτα, το μέγεθος του πακέτου APK μειώθηκε από 41 σε 22 MB και η κατανάλωση μνήμης από 185 σε 136 MB.
Πηγή: opennet.ru
