Автор Пайал Миттал
Facebook запустил новый движок JavaScript с открытым исходным кодом под названием «Hermes» для повышения производительности мобильных приложений React Native на Android.
В течение нескольких месяцев команда Facebook непрерывно работала над улучшением кода и платформ JavaScript для повышения производительности приложений Facebook. Проанализировав данные о производительности, они заметили, что сам движок JavaScript был значительным фактором в производительности при запуске и размере загрузки. Поэтому они работали над оптимизацией производительности JavaScript в более ограниченных средах и разработали «Гермес». Команда еще не планировала распространять проект на браузеры или серверы, такие как NodeJS.
Здесь мы узнаем больше о Hermes. Тогда давай нырнем ...
Обзор о Hermes-
Hermes специально создан для ускорения запуска приложений с помощью статической оптимизации и компактного байт-кода. Это улучшает время запуска, размер приложения и использование памяти приложениями.
В блоге Facebook написал:
«Hermes улучшает производительность React Native, уменьшая использование памяти, уменьшая размер загружаемых файлов и уменьшая время, необходимое для того, чтобы приложение стало пригодным для использования, или« время до интерактивности »(TTI)».
Гермес улучшает некоторые основные атрибуты приложения, обеспечивающие его высокую производительность, а именно:
- Время взаимодействия (TTI) - приложения запускаются быстрее, сокращая время запуска за счет предварительной компиляции байт-кода.
- Размер загрузки (размер файла APK) - будучи меньше по размеру, он запускается мгновенно, не утяжеляя приложение.
- Снижение использования памяти
- Опережающая статическая оптимизация
- Нет компилятора JIT (Just-In-Time)
- Сжатый байт-код
- Предварительная компиляция байт-кода
- Стратегия сборщика мусора с функциями незаразного, дефрагментированного и виртуального адреса (VA) выделения памяти по запросу.
- Ленивая компиляция
- Соответствует спецификации ES6
- JSI, легкий API для встраивания движка JavaScript в приложения C ++, чтобы упростить переход на Hermes.
Как вы можете видеть на картинке, TTI был уменьшен на 2,29 секунды, размер файла APK уменьшен на 19 МБ, а использование памяти уменьшено на 49 МБ. В результате этого уменьшения произошло существенное улучшение приложений React Native.
Предварительная компиляция байтов
Обычно движок JavaScript анализирует исходный код JS после его загрузки и генерирует байт-код дальше. Этот шаг задерживает выполнение скрипта.
Hermes пропускает этот шаг и использует опережающий компилятор, который работает вместе с процессом сборки приложения и оптимизирует байт-код, тем самым делая его меньше по размеру и более эффективным.
В Hermes байт-код разработан таким образом, что его можно отображать и интерпретировать без чтения всего файла, что приводит к значительному улучшению TTI.
Хотя этот байт-код немного больше, чем сжатый код JavaScript, Гермес уменьшает общий размер приложения для React Native Apps.
Как использовать Hermes в приложении React Native?
Использование Hermes в приложении React Native включает три основных шага:
- Сделайте пакет Hermes npm
- Регистрация этого пакета npm в Yarn
- Связывание Hermes с приложением React Native.
Теперь давайте обсудим, как выполнить все эти задачи.
# Сделайте пакет Hermes npm
Пакет Hermes npm состоит из инструментов CLI для компиляции JavaScript в байт-код и отлаженных версий собственной библиотеки Hermes для Android. Однако, чтобы скомпилировать собственные библиотеки для Android, вам необходимо настроить соответствующую среду разработки.
- Чтобы создать отлаженную версию инструментов Hermes CLI, необходимо выполнить следующие шаги в macOS / Linux -
mkdir hermes_workingdir cd hermes_workingdir git clone https://github.com/facebook/hermes.git hermes/utils/build/build_llvm.py hermes/utils/build/configure.py cd build ninja
- В случае Windows необходимо соблюдать следующие шаги:
mkdir hermes_workingdir cd hermes_workingdir git -c core.autocrlf=false clone https://github.com/facebook/hermes.git hermes/utils/build/build_llvm.py --build-system='Visual Studio 16 2019' --cmake-flags='-A x64' --distribute hermes/utils/build/configure.py --build-system='Visual Studio 16 2019' --cmake-flags='-A x64 -DLLVM_ENABLE_LTO=OFF' --distribute cd build MSBuild.exe ALL_BUILD.vcxproj /p:Configuration=Release
# Зарегистрируйте пакет с пряжей
- На самом первом шаге вам необходимо выполнить следующую команду для создания кросс-скомпилированного LLVM-
(cd $HERMES_WS_DIR && ./hermes/utils/crosscompile_llvm.sh
- Теперь вы можете создавать библиотеки Hermes для платформ Android и упаковывать все вместе -
(cd $HERMES_WS_DIR/build_release && ninja github-cli-release) (cd $HERMES_WS_DIR/hermes/android && gradle githubRelease) cp $HERMES_WS_DIR/build_android/distributions/hermes-runtime-android-v*.tar.gz $HERMES_WS_DIR/hermes/npm cp $HERMES_WS_DIR/build_release/github/hermes-cli-*-v*.tar.gz $HERMES_WS_DIR/hermes/npm cd $HERMES_WS_DIR/hermes/npm && yarn install && yarn run prepack-dev) cd $HERMES_WS_DIR/hermes/npm && yarn link)
Последняя команда ссылки пряжи зарегистрирует пакет Hermes в пряжи для включения в локальные проекты.
# Свяжите пакет с приложением React Native
Теперь последний шаг - связать пакет npm Hermes с вашим приложением. Предположим, например, что ваш проект находится в каталоге $ user_project, вы должны выполнить следующую команду:
(cd $user_project/node_modules/react-native && yarn link hermes-engine)
Теперь вы можете разработать приложение обычным способом.
Итог
Вы можете загрузить Hermes с Github. Там же есть подробное руководство с инструкциями. Facebook довольно часто использует это конкретное слово «Гермес», но вы наверняка слышали, что Гермес - бог посланников согласно древнегреческой мифологии.
Однако вы можете делать свои собственные предположения. Оставайтесь на связи с нами, чтобы узнать больше Последние технические выпуски.