Использование Hermes¶
Hermes — это JavaScript-движок с открытым исходным кодом, оптимизированный для React Native. Для многих приложений использование Hermes приведет к улучшению времени запуска, снижению использования памяти и уменьшению размера приложения по сравнению с JavaScriptCore.
Hermes используется по умолчанию в React Native, и для его включения не требуется дополнительных настроек.
Пакетный Hermes¶
React Native поставляется с комплектованной версией Hermes.
Мы будем собирать версию Hermes для вас всякий раз, когда будем выпускать новую версию React Native. Это гарантирует, что вы будете использовать версию Hermes, полностью совместимую с версией React Native, которую вы используете.
Исторически у нас были проблемы с согласованием версий Hermes с версиями React Native. Это полностью устраняет эту проблему и предлагает пользователям JS-движок, совместимый с конкретной версией React Native.
Это изменение полностью прозрачно для пользователей React Native. Вы по-прежнему можете отключить Hermes с помощью команды, описанной на этой странице.
Вы можете подробнее о технической реализации на этой странице.
Подтверждение использования Hermes¶
Если вы недавно создали новое приложение с нуля, вы должны увидеть, включен ли Hermes, в окне приветствия:
Глобальная переменная HermesInternal
будет доступна в JavaScript, которую можно использовать для проверки того, что Hermes используется:
1 |
|
Если вы используете нестандартный способ загрузки пакета JS, возможно, что переменная HermesInternal
доступна, но вы не используете высоко оптимизированный предварительно скомпилированный байткод.
Убедитесь, что вы используете файл .hbc
, а также проведите сравнение до и после, как описано ниже.
Чтобы убедиться в преимуществах Hermes, попробуйте сделать релизную сборку/развертывание вашего приложения для сравнения. Например:
1 |
|
или для iOS:
1 |
|
Это позволит компилировать JavaScript в байткод во время сборки, что улучшит скорость запуска вашего приложения на устройстве.
Отладка JS на Hermes с помощью DevTools Google Chrome¶
Hermes поддерживает отладчик Chrome, реализуя протокол инспектора Chrome. Это означает, что инструменты Chrome можно использовать для прямой отладки JavaScript, запущенного на Hermes, на эмуляторе или на реальном, физическом, устройстве.
Обратите внимание, что это очень отличается от "Удаленной отладки JS" из меню In-App Dev, описанного в разделе Отладка, которая фактически запускает JS-код на V8 Chrome на вашей машине разработки (ноутбуке или настольном компьютере).
Chrome подключается к Hermes, запущенному на устройстве, через Metro, поэтому вам нужно знать, где Metro слушает. Обычно это localhost:8081
, но это настраивается. При запуске yarn start
адрес записывается в stdout при запуске.
Как только вы узнаете, где прослушивается сервер Metro, вы сможете подключиться к Chrome, выполнив следующие действия:
1. Перейдите по адресу chrome://inspect
в экземпляре браузера Chrome.
2. Используйте кнопку Configure...
, чтобы добавить адрес сервера Metro (обычно localhost:8081
, как описано выше).
3. Теперь вы должны увидеть цель "Hermes React Native" со ссылкой "inspect", которую можно использовать для запуска отладчика. Если вы не видите ссылку "inspect", убедитесь, что сервер Metro запущен.
4. Теперь вы можете использовать инструменты отладки Chrome. Например, чтобы поставить точку останова при следующем запуске JavaScript, нажмите на кнопку паузы и вызовите действие в вашем приложении, которое приведет к выполнению JavaScript.
Включение Hermes на старых версиях React Native¶
Hermes является движком по умолчанию начиная с версии React Native 0.70. В этом разделе объясняется, как включить Hermes на старых версиях React Native.
Во-первых, убедитесь, что вы используете как минимум версию 0.60.4 React Native для включения Hermes на Android или 0.64 React Native для включения Hermes на iOS.
Если у вас уже есть приложение, основанное на более ранней версии React Native, вам придется сначала обновить его. Как это сделать, смотрите в разделе Обновление до новых версий React Native. После обновления приложения убедитесь, что все работает, прежде чем пытаться перейти на Hermes.
Примечание для совместимости с React Native
Каждый релиз Hermes ориентирован на определенную версию RN. Эмпирическое правило — всегда строго следовать релизам Hermes.
Несовпадение версий может привести к мгновенному краху ваших приложений в худшем случае.
Примечание для пользователей Windows
Для работы Hermes требуется Microsoft Visual C++ 2015 Redistributable.
Android¶
Отредактируйте файл android/gradle.properties
и убедитесь, что hermesEnabled
равно true
:
1 2 3 |
|
Это свойство было добавлено в React Native 0.71. Если вы не можете найти его в файле gradle.properties
, обратитесь к документации для соответствующей версии React Native, которую вы используете.
Также, если вы используете ProGuard, вам нужно добавить эти правила в proguard-rules.pro
:
1 2 |
|
Далее, если вы уже создавали свое приложение хотя бы один раз, очистите сборку:
1 |
|
Вот и все! Теперь вы можете разрабатывать и развертывать свое приложение как обычно:
1 |
|
iOS¶
Начиная с версии React Native 0.64, Hermes также работает на iOS. Чтобы включить Hermes для iOS, отредактируйте файл ios/Podfile
и внесите изменения, показанные ниже:
1 2 3 4 5 6 7 8 |
|
По умолчанию вы будете использовать Hermes, если вы находитесь на Новой архитектуре. Указав значение, например true
или false
, вы можете включить/выключить Hermes по своему усмотрению.
После того, как вы настроили его, вы можете установить капсулы Hermes с помощью:
1 |
|
Вот и все! Теперь вы можете разрабатывать и развертывать свое приложение как обычно:
1 |
|
Переключение обратно на JavaScriptCore¶
React Native также поддерживает использование JavaScriptCore в качестве JavaScript engine. Следуйте этим инструкциям, чтобы отказаться от Hermes.
Android¶
Отредактируйте файл android/gradle.properties
и верните значение hermesEnabled
в false
:
1 2 3 |
|
iOS¶
Отредактируйте файл ios/Podfile
и внесите изменения, показанные ниже:
1 2 3 4 5 6 7 8 |
|