3. 메인 프로세스
일렉트론 어플리케이션의 메인 프로세스는 특별하다. 앱에서 다른 모든 프로세스들과 운영체제의 상호작용하는 프로세스에 대한 부모 프로세스로써
앱의 다양한 작업을 메인 프로세스에서 통산을 처리한다. UI 쓰레드도 포함되어 있다.
어떤 경우에도 메인 프로세스와 UI 쓰레드를 오래걸리는 작업을 통해서 차단해서는 안된다 UI쓰레드를 차단하는 것은 앱 전체가 메인 프로세스가
처리를 하는동안 멈춰있는 것을 의미한다
왜?
메인 프로세스와 UI 쓰레드는 근본적으로 앱 안에서 주된 작업을 하는 컨트롤 타워라고 할 수 있다. 언제 마우스 클릭 이벤트가 발생하면 윈도우에
도달하기 전에 메인 프로세스를 거치게 된다 만약 윈도우가 앱에서 원할하게 애니메이션을 랜더링 하고 있다면, 이 작업은 GPU 프로세스를
거쳐 메인 프로세스를 거치게 된다
일렉트론과 크롬은 UI 스레드가 차단 되지 않도록 무거운 디스크 I/O와 CPU 바인딩 작업을 할때는 새 쓰레드에 넣도록 주의한다
어떻게?
Elecctron의 파워풀한 멀티프로세스 아키텍쳐는 장시간 실행되는 작업에 대한 지원뿐 아니라 적은 수의 성능 트랩들도 지원한다
-
작업시간이 오래 걸리는무거운 CPU작업의 경우 Worker Threads를 사용하고 BrowserWindow로 이동시키는 것을 고려하거나 마지막 수단으로 전용 프로세스를 생성해야한다
-
동기식 IPC와
remote
모듈은 가급적 피해라 사용 사례가 있긴 하지만remote
모듈은 UI 쓰레드를 자신도 모르게 차단할 가능성이 높다 -
메인 프로세스에서 I/O 차단 작업을 사용하지마라 즉, Node.js의 핵심 모듈인 fs, child_process는 동기식 또는 비동기 버전을 제공하는데 이때 비동기식 및 비차단식 변수를 선택해야한다
- 동기식 코드는 보통 문제가 되는것 같다. 최대한 동기식코드를 줄이고 비동기로 변경해야겠다.
Notices
영어공부를 통해서 영문자료를 번역하다보니 오역도 많고 모자란 부분이 많습니다 공식문서 보시면서 확인하시는걸 추천드려요!