2019-08-15 TIL

2019-08-15

import

import의 오해와 진실… (소오름)

  1. 여러 컴포넌트에서 같은 모듈을 import하더라도, 최초 단 한번만 import된다.

  2. import할 모듈의 전역 스코프에 어떤 함수를 호출하게 적혀있다면, 그 모듈을 import하는 것 만으로도 그 함수가 호출된다. 만약 그 함수가 메모리를 많이 차지하거나 무거운 연산을 하는 녀석이라면 큰 낭패를 볼 수도 있다. 따라서 절대 사용하지 않는 모듈이라면 단 한번이라도 import해선 안된다. (모듈을 작성할때도 주의해야 할 것임. 무거운건 전역에 놓지 않아야한다.)

  3. 특정 함수나 변수만 import하더라도, 그 모듈의 전역 스코프에 호출된 함수는 수행된다. 게다가 import한 함수를 사용하지 않아도 말이다.


여러 사람이 오랜 기간에 걸쳐 반복적인 개발과 유지보수를 하게 되는 product 코드를 보면서 최적화에 대한 욕심이 자주 일어나곤 한다. import를 최적화 하면 우리 앱의 메모리 사용량을 줄일 수 있을거란 생각으로 평소에 궁금했던걸 간단히 실험해본 결과를 적었음. 메모리 사용량을 줄이겠다고 모듈 전체 import하던걸 사용하는 함수만 import하게 고치곤 했는데 이제 보니 의미없는 행위라고 생각된다. micro한 최적화긴 해도, import에서 메모리 사용량을 줄이려면 한 파일에 한 함수만 적어 import하는것이 이상적이겠다. -_- 들이는 공수와 파일 관리 복잡성을 버려 얻는 이득이 많아야 5MB를 넘지않는 메모리 사용량이라면? 거른다..

한편으로 궁금한건.. import 구문때문에 메모리에 올렸지만, 어디서도 참조하지 않는걸 자바스크립트 엔진이 발견한다면 과연 garbage collection의 대상이 될까? 그렇다면 import 후 시간이 좀 지나면 메모리 사용량이 줄어들 것 같은데.


Minchang Kim
Minchang Kim
웹/앱 개발자 김민창입니다! 좋은 하루 되세요!