일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스팀게임추천
- react line chart
- react circle progress bar
- 안드로이드
- 프로그래머스 LV.0
- 하우스플리퍼인테리어
- 리액트네이티브 hooks
- react native new architecture
- circular progress bar
- react
- React Native
- Kotlin
- 리액트 라인차트
- react circle progress
- react native lodash
- react native old architecture
- 프로그래머스 Lv0
- 리액트 line chart
- Android
- 리액트네이티브
- ReactNative
- react native hooks
- Graveyard Keeper
- 프로그래머스
- javascript interface
- react 라인차트
- 하우스플리퍼
- react native hook
- react native jsi
- RecyclerView
- Today
- Total
숨참고 개발다이브
[React Native] Hermes engine이란? 본문
React Native를 개발하다 보면, hermes engine이라는 단어가 많이 보인다.
그래서 hermes engine이 뭘까??
공식 문서
https://reactnative.dev/docs/hermes
Hermes란?
hermes는 Facebook에서 개발한 오픈소스 javascript 엔진이다.
헤르메스 엔진의 주요 특징은 다음과 같다.
- 인라인 캐싱: 자주 사용되는 JavaScript 코드를 캐시 하여 실행 속도를 높인다.
- JIT 컴파일: 런타임에 자바스크립트 코드를 기계 코드로 변환하여 성능을 향상시킨다.
- AOT 컴파일: 앱 빌드 타임에 자바스크립트 코드를 바이트 코드로 변환하여 앱 시작 속도를 높인다.
- Hermes Bytecode: 자바스크립트 코드를 효율적으로 표현하기 위한 맞춤형 바이트코드 형식을 사용한다.
* AOT(Ahead-Of-Time) 컴파일러란?
AOT 컴파일러(Ahead-Of-Time Compiler)는 프로그램을 실행 전 코드를 미리 변환하는 컴파일러를 말한다.
Javascript와 Hermes 비교
Gemini가 정리해 준 기존 엔진과의 비교는 다음과 같다.
공식 사이트에서는 Hermes를 jsc와 비교했을 때 시작시간 개선, 메모리 사용량 축소, 앱 크기 축소를 이유로 react native에 가장 최적화된 자바스크립트 엔진이라고 한다.
헤르메스 엔진의 핵심 장점은 다음과 같다.
- 빠른 앱 시작: 빌드 타임에 자바스크립트를 효율적인 바이트코드로 사전 컴파일하여 앱 시작 속도를 높인다.
- 메모리 사용량 감소: 혁신적인 메모리 관리 기술을 통해 기존 엔진 대비 메모리 사용량을 최대 50%까지 줄인다.
- 앱 크기 축소: JavaScript 코드를 효율적으로 압축하여 앱 크기를 최대 40%까지 줄인다.
Hermes 사용하기
0.70 버전부터는 Hermes가 기본이기 때문에 따로 설정할 것은 없다. 이하 버전에서는 별도의 설정을 해야 하지만 굉장히 간단하기 때문에 쉽게 할 수 있다.
0.70 버전 이하의 프로젝트에서 헤르메스 엔진을 사용하기 위해서는 다음 버전 이상의 React Native 버전이 필요하다. 다만 iOS는 0.64 버전부터 기본 JavaScript 엔진으로 자동 적용된다.
- Android: 0.60.4 버전 이상
- iOS: 0.64 버전 이상
안정적인 사용을 위해서는 0.64 버전 이상을 사용할 것을 권장하고 있다.
android
android/gradle.properties 에서 다음 코드를 추가한다.
hermesEnabled=true
해당 값들을 true로 하면 hermes를, false면 JavascriptCore를 사용한다.
만약 ProGuard를 사용한다면 다음 설정도 진행해 준다.
// proguard-rules.pro
-keep class com.facebook.hermes.unicode.** { *; }
-keep class com.facebook.jni.** { *; }
모든 과정이 완료되면 빌드를 clean 시켜준다.
$ cd android && ./gradlew clean
iOS
ios/podfile 에 다음 코드를 추가한다.
use_react_native!(
// :hermes_enabled => flags[:hermes_enabled], <- 기본설정
:hermes_enabled => true,
)
설정 후 ios 디렉토리에서 pod install을 다시 해준다.
Hermes 사용 중인지 확인하기
Hermes가 사용 중인지 확인하는 데 사용할 수 있는 전역 변수를 JavaScript에서 사용할 수 있다.
const isHermes = () => !!global.HermesInternal;
'개발 > React & React Native' 카테고리의 다른 글
[React Native/iOS] 리액트 네이티브 환경에서 iOS Privacy Manifest 정책 대응하기 (0) | 2024.03.25 |
---|---|
[React Native] patch-package를 사용해 라이브러리 커스텀하기 (0) | 2024.03.19 |
[React Native] flatlist의 콜백 옵션 (removeClippedSubviews, onScrollToIndexFailed) (1) | 2024.02.28 |
[React Native] tsconfig.json baseUrl 설정과 Unable to resolve module 에러 해결 (0) | 2024.02.22 |
[React / React Native] 우아한 테크세미나 - React Query 와 상태관리 정리 (0) | 2024.02.19 |