The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Facebook открыл код JavaScript-движка Hermes

12.07.2019 21:26

Компания Facebook открыла исходные тексты легковесного JavaScript-движка Hermes, оптимизированного для выполнения приложений на базе фреймворка React Native на платформе Android. Поддержка Hermes встроена в React Native начиная с сегодняшнего выпуска 0.60.2. Проект призван решить проблемы с большим временем запуска нативных JavaScript-приложений и значительным потреблением ресурсов. Код написан на языке C++ и распространяется под лицензией MIT.

Из достоинств применения Hermes отмечается сокращение времени запуска приложения, снижение потребления памяти и уменьшение размера приложения. При применении V8 наиболее длительными являются стадии парсинга исходного кода и его компиляции на лету. Hermes выносит эти стадии на этап сборки и позволяет поставлять приложения в форме компактного и эффективного байткода.

Для непосредственного выполнения приложения применяется разработанная в рамках проекта виртуальная машина со сборщиком мусора SemiSpace, распределяющим блоки только по необходимости (On-demand), поддерживающим перемещение и дефрагментацию блоков с отдачей освободившейся памяти операционной системе, обходящийся без периодического сканирования содержимого всей кучи.

Обработка JavaScript разделяется на несколько стадий. Вначале осуществляется парсинг исходных текстов и генерация промежуточного представления кода (Hermes IR), основанного на представлении SSA (Static Single Assignment). Далее, промежуточное представление обрабатывается в оптимизаторе, который применяет техники упреждающей статической оптимизиации для преобразования первичного промежуточного кода в более эффективное промежуточное представление, сохраняя при этом оригинальную семантику программы. На последнем этапе генерируется байткод для регистровой виртуальной машины.

В движке поддерживается часть JavaScript-стандарта ECMAScript 2015 (конечной целью является его полная поддержка) и обеспечивается совместимость с большинством существующих приложений React Native. В Hermes решено не поддерживать локальный запуск eval(), выражения "with", рефлексию (Reflect и Proxy), API Intl API и некоторые флаги в RegExp. Для включения Hermes в приложении React Native достаточно добавить в проект опцию "enableHermes: true". Также возможна сборка Hermes в режиме CLI-интерфейса, позволяющая выполнить произвольные JavaScript-файлы из командной строки. Для отладки доступен режим lazy-компиляции, позволяющий в процессе разработки не компилировать JavaScript каждый раз, а генерировать байткод на лету уже на устройстве.

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

Дополнение: Facebook опубликовал результаты собственных тестов. При использовании Hermes с приложением MatterMost время начала доступности для работы (TTI, Time To Interact) уменьшилось 4.30 до 2.01 сек., размер APK-пакета сократился с 41 до 22 Мб, а потребление памяти с 185 до 136 Мб.

  1. Главная ссылка к новости (https://www.theregister.co.uk/...)
  2. OpenNews: Выпуск встраиваемого JavaScript-движка Duktape 2.2.0
  3. OpenNews: Microsoft портировал JavaScript-движок ChakraCore для Linux и maсOS
  4. OpenNews: Представлен TurboFan, новый JIT-компилятор для JavaScript-движка V8
  5. OpenNews: Mozilla развивает WASI для использования WebAssembly вне браузера
  6. OpenNews: Проекты по созданию компиляторов из Java в JavaScript и исполняемые файлы
Лицензия: CC-BY
Тип: Программы
Ключевые слова: facebook, javascript, hermes
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (51) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (1), 22:03, 12/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Но ведь уже есть QuickJS.
     
     
  • 2.18, Мех (?), 08:52, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Без jit он работает в слоумо в сравнении с любым браузерным движком. А это поделие может вырасти как дополнение к чакре, для простого встраивания.
     
     
  • 3.19, Аноним (19), 09:01, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Оно же умеет в native компилять. Но без DOM и CSS, да.
     
     
  • 4.30, Мех (?), 13:32, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В натив умеет компилять только великий nectarjs, а quick - обычный интерпретатор, который можно со скриптом внутри в бинарник собрать.
     
     
  • 5.33, Андрей (??), 17:03, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > а quick - обычный интерпретатор, который можно со скриптом внутри в бинарник собрать.

    Тогда отредактируйте новость, чтобы устранить эту ошибку:

    > Более того, доступен компилятор qjsc, способный на выходе генерировать пригодные для обособленного запуска исполняемые файлы, не требующие внешних зависимостей.

    https://www.opennet.ru/opennews/art.shtml?num=51079

    Если это действительно ошибка, разумеется.

     
     
  • 6.50, Мех (?), 13:02, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    "The generated C source contains the bytecode of the compiled functions or modules."
    Не вижу противоречий. Бенчмарков его нет, но сомневаюсь что это что-то меняет.
     
  • 5.34, Андрей (??), 17:13, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > В натив умеет компилять только великий nectarjs

    Но чтобы его запустить нужен nodejs с npm.

     
     
  • 6.51, Мех (?), 13:03, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Если бы ты запустил, то понял шутку)
     

  • 1.2, Аноним (2), 22:14, 12/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +45 +/
    Астрологи объявили неделю легковесных движков javascript.
     
     
  • 2.35, Аноним (35), 18:14, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А кто объявил год баянов на опеннете?
     
     
  • 3.39, Ilya Indigo (ok), 19:52, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    3-ие Герои всегда живы!
    Их нельзя убить.
     
     
  • 4.44, Вторые (?), 05:15, 14/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это же уже и во вторых вроде было?
     
     
  • 5.46, anonymoussssss (?), 11:37, 14/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это было во всех частях
     

  • 1.3, segesg (?), 22:23, 12/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +17 +/
    >нативных JavaScript-приложений

    Оксюморон

     
  • 1.4, Урри (?), 22:46, 12/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Астрологи объявили неделю JS-велосипедов.
    Количество постов с JS движками увеличилось вдесятеро.
     
  • 1.6, Аноним (6), 00:04, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Т е программеры Фейсбука корячились, пыхтели, а на выходе получилось то же что... текст свёрнут, показать
     
  • 1.7, Аноним (7), 00:12, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    JS-движков что-то как грязи. Почему так?
     
     
  • 2.10, YetAnotherOnanym (ok), 01:10, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Потому что JS-кодеры фейсбука приходят к начальству и говорят: наши приложения тормозят, нужен новый движок. Начальство, вместо того, чтобы отхлестать их линейкой по рукам, заказывает сишникам новый JS-движок. Сишники пишут новый движок, на эпсилон процентов быстрее предыдущего. Но вскоре жабаскриптеры снова приходят к начальству с жалобой на тормозньй движок.
     
     
  • 3.41, Аноним (41), 21:43, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Почему бы js-говнокодерам не научиться оптимизировать свой говнокод?
     
     
  • 4.42, InuYasha (?), 21:52, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А это вообще возможно с JavaScript?
     

  • 1.8, Anonymouss (?), 00:32, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Герме́с (др.-греч. Ἑρμῆς, микен. e-ma-a2[1]) — в древнегреческой мифологии бог торговли, прибыли, хитрости, разумности, ловкости и красноречия, дающий богатство и доход в торговле. Покровитель глашатаев, послов, пастухов, путников; покровитель магии, алхимии и астрологии. Посланник богов и проводник душ умерших (отсюда прозвище Психопомп — проводник душ) в подземное царство Аида, изобрёл меры, числа, азбуку и обучил людей.

    Спасибо!)

     
     
  • 2.36, Аноним (35), 18:16, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Психопомп

    О, так и будем называть!

     

  • 1.9, YetAnotherOnanym (ok), 00:59, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    > нативных JavaScript-приложений
    > Код написан на языке C++

    А не проще писать сами "нативные приложения" сразу на C++?

     
     
  • 2.11, Ananas (?), 01:37, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +15 +/
    Изыди, Еретик.
     
     
  • 3.27, Leo (??), 11:28, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачет )))))
     
  • 2.13, Аноним (13), 02:52, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    ну, во-первых в джава больше равно

    а дальше по накатанной

     
  • 2.22, anonymous (??), 09:58, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    а потом: фу, ваше приложение для заказа пиццы аварийно завершило работу! у вас слишком кривые руки, чтобы писать на С++

    Нативное в react native - возможность налабать "веб страничку с кнопками, которая работает без интернета или с маленьким количеством интернета" для телефона или планшета.

     
     
  • 3.24, Аноним (24), 11:10, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ты так пишешь словно java или js аварийно не завершаются.
    И есть qml, который быстрее джавы и js, писался специально под интерфейсики и гораздо проще плюсов, что даже ты осилишь.
     

  • 1.12, Аноним (12), 01:47, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Сколько уже раз они переизобрели JVM со всеми этими WebAssembly и проч.?
     
     
  • 2.17, Онаним (?), 08:31, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да потому что это овнище как ни оптимизируй, всё равно на выходе лажа получается.
    И лучше более-менее универсального V8 для этого овнища пока что не придумано.
     
     
  • 3.40, Андрей (??), 20:08, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Каждый любитель должен написать свой мессенджер. А профессионалы - свой эффективный движок JS.
     

  • 1.14, Аноним (14), 03:19, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    >JS
    >Facebook
    >Android
    >Microsoft Office

    Кккомбо!

     
  • 1.16, Аноним (16), 08:26, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Я что-то не понимаю, но рынке мобильников происходит тоже, что и на рынке ПК: память и CPU теряют стоимость, не говоря о том, что все знают про интеловские процы LV и ULV (т.е не топсикрет). Зачем бросать силы на эти оптимизации? Через несколько лет это станет бесмысленным (как бы это уже сейчас так).
    Если говорить про настоящие крошечные устройства, то там всегда будет на первом месте ЯП со строгой типизацией, компиляторы в нативный байткод и вставки ассемблера для пущего шика.
    Что касается node.js, то в той же Visual Studio она жрет ресурсов немерянно и на 2х ядрах студия еле-еле ворочаяется. И это уровень, который хотят достигнуть? Только после того как изобретут карманные атомные батарейки.
     
     
  • 2.20, Аноним (20), 09:29, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Вёб-макак допустили до программирования приложений, развелось интерпретируемых/JIT языков как грязи, а сишники не могут найти работу.
     
     
  • 3.21, Аноним (13), 09:48, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    сишников не могут найти работодатели, их нет нифига. все или уже работают, или "ok &= a" вместо "ok = ok && a" пишут
     
  • 3.29, KonstantinB (ok), 13:29, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Плохо ищут. Либо плохо учили английский и не там ищут. На мировом рынке, несмотря не все, спрос превышает предложение.
     

  • 1.23, Аноним (23), 10:06, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Facebook, не пробовал нанимать нормальных JS-программистов, чтобы не писали тонны говно-кода, который еле шевелится?
     
     
  • 2.25, Аноним (24), 11:13, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачем нужны js программисты, если есть нормальные c++/go/rust разработчики? Да даже питон и проще и быстрее.
     
     
  • 3.26, vitalif (ok), 11:27, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Питон тормознее раз в 10, чем v8
     
     
  • 4.32, Аноним (32), 14:58, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Питон тормознее раз в 10, чем v8

    Джентельмены верят друг другу на слово?

     
     
  • 5.45, noname14рпаргнпр (?), 07:51, 14/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    да, но
    python -> cython -> c
    профит
     
  • 4.37, Аноним (37), 18:40, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    раз в 80, чем v8
     
     
  • 5.38, Аноним84701 (ok), 19:27, 13/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > раз в 80, чем v8

    Может, сразу в 100500?
    Сравнивать ЯП с реализацией другого ЯП - это вообще "сильно".

     
  • 3.49, Антон (??), 23:28, 14/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    зачем питон если есть js?
     

  • 1.28, northbear (??), 12:36, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Глядя на убогое глюкавое поделие под названием Facebook что-то другое в их исполнении смотреть желания не возникает. Каким-то удивительным образом React у них получился норм. Но всё остальное...
      
     
     
  • 2.47, Аноним (47), 12:36, 14/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В каком месте React норм? После того как Яндекс стал переводить свои сервисы на него, пользоваться стало невозможно. Открой Маркет или из любопытства загляни на главную поисковика и попробуй покликать. Ничем не лучше тормознутого Facebook, на который любят все ссылаться.
     
  • 2.55, Аноним (55), 08:43, 30/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    ну instagram - вполне себе няшный и более менее минималистичный (по сравнению с facebook)
     

  • 1.31, Аноним (31), 13:35, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Наконец-то!
     
  • 1.43, InuYasha (?), 21:55, 13/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Hermes vs. QuickJS vs. v8?

    Голова уже крУгом от этих ужастиков.

     
  • 1.48, Аноним (48), 21:46, 14/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >что при использовании Hermes приложение Microsoft Office для Android становится доступно для работы через 1.1 сек. после запуска и потребляет 21.5MB ОЗУ, в то время как при использовании движка V8 на запуск тратится 1.4 сек., а потребление памяти составляет 30MB.

    Меньше чем нативная версия на десктопе?????

     
  • 1.54, Аноним (55), 08:42, 30/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Hermes выносит эти стадии на этап сборки и позволяет поставлять приложения в форме компактного и эффективного байткода.

    WASM? Не слышал...

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру