일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 10926번
- LeetCode
- 10869번
- 파이썬
- Python
- 리스트복사
- v-on
- 백준
- 쿠버네티스
- v-for
- 3003번
- 우테코
- MSA
- vue
- v-model
- DevOps
- 빅오표기법
- 실행 컨텍스트
- 2588번
- 이벤트버블링
- 코어자바스크립트
- v-if
- 도커
- 프리코스
- JavaScript
- 젠킨스
- 객체지향의 사실과 오해
- 이벤트캡쳐링
- hoisting
- 배열파티션
Archives
- Today
- Total
새오의 개발 기록
Javascript: 코드의 분석과 컴파일링 본문

1. 코드를 HTML 파일에 임포트 하면 브라우저가 해당 HTML을 읽는 작업을 함
- 스크립트를 감지하여 임포트 함
- 브라우저가 스크립트를 HTML 혹은 HTML로 작성된 인라인 스크립트를 실행함
2. 브라우저가 스크립트를 분석(parsing)하고 실행함
2-1. Parsing 단계
- parsing(분석): 브라우저가 Javascript 코드를 읽어 들여서 로딩하는 작업.
- 실행은 실제로 일어나는 과정으로 코드가 영향력을 발휘하는 단계.
- 브라우저는 Javascript 엔진을 이용하게 되는데 모든 주요 브라우저에는 해당 기능을 지원함.
- Google 브라우저인 Chrome에서는 v8, Firefox에서는 Spider Monkey와 같은 엔진이 분석과 실행을 도맡음
- 대부분 interpreter와 compiler의 두 부분으로 나뉨. 이때 컴파일러는 JIT 컴파일러임.
JIT 컴파일러


이미 한번 읽어서 기계어로 변경한 소스코드는 저장해 두고 다시 번역하지 않음
정확히는 반복되는 코드를 모두 컴파일러로 컴파일 시키는거다.
그래서 인터프리터의 역할을 보조 해준다고 생각하면 되는데, 이전 실행과 현재 실행 시 달라진 부분이 없는 코드의 경우에는 재컴파일링을 거치지 않고 컴파일된 코드를 다시 사용하게 된다.
2-2. Interpreter 단계
- 스크립트를 로드하고 실행을 시작함.
- 이 작업을 인터프리터가 수행함.
- 인터프리터가 스크립트를 로드하고 읽어 들여서 이를 실행하기에 좀 더 쉬운 바이트 코드로 변환한 다음 스크립트 실행을 시작함.
- 인터프리터는 스크립트를 실행할 때 최적화된 방식으로 한 줄씩 실행하는데 스크립트 실행이 이루어지지만 가장 빠른 방식으로 실행되는 건 아님.
- 따라서 인터프리터는 스크립트의 실행을 시작할 뿐만 아니라 바이트코드를 컴파일러로 전달함. 즉 로드된 스크립트를 컴파일러로 전달함.
2-2. Compiler 단계
- 인터프리터가 스크립트를 실행하는 동안 컴파일러는 스크립트를 머신 코드로 컴파일하기 시작함.
- JIT 컴파일러는 코드를 읽고 실행 중에 컴파일링을 시작하고 동시에 컴파일 된 코드를 실행함.
- 기존 스크립트나 스크립트의 일부가 다시 실행되는 경우 이미 컴파일링을 거쳤으므로 재컴파일될 필요가 없어서 해당 코드를 그대로 사용하므로 훨씬 더 빠른 방법이 됨.
- 짧은 스크립트의 경우에는 인터프리터 작업 자체가 이미 끝난 뒤더라도 컴파일링 단계는 수행됨.
- 비교적 신속한 작업인 머신코드 컴파일링이 끝나면 해당 머신 코드는 컴퓨터로 전달되어서 실행 단계로 접어듦.
- 최상의 성능을 위해서는 단순히 코드를 실행하는 것이 아니라 머신에 코드를 컴파일한 다음 운영체제에 전달해야 함.
- 컴파일러 또한 브라우저의 Javascript 엔진에 포함된 기능으로 Google Chrome 브라우저의 v8 엔진 속 컴파일러는 TurboFan이라는 이름이 붙어 있음.
3. API
- 브라우저는 API와 같이 Javascript 코드에서 사용할 수 있는 빌트인 기능을 지원함.
- 사용자의 위치를 파악하는 등 여러 빌트인 API가 있음.
- 이와 같은 브라우저 API는 브라우저의 일부로 C++로 쓰여 있는데 이 또한 어떤 브라우저를 사용하는지에 따라서 다름.
- 즉 브라우저는 의사소통의 다리가 되어줌.
- 함수나 객체를 호출할 수 있는데 Javascript 코드에서만 호출할 수 있는 사항들임.
- Javascript 코드에서 호출할 수 있다는 건 코드를 인터프리터와 컴파일을 거치면 브라우저가 해당 함수나 객체를 어디서 찾아야 하는지 알게 되고 이와 같은 API도 찾음. 네이티브 API 호출이나 빌트인 브라우저 기능 호출은 인터프리터 또는 컴파일된 코드에 포함됨.
- 이것으로 컴파일링 완료된 코드가 머신 상에서 실행되고 해당 브라우저의 API에 액세스 할 수 있게 됨.
- 액세스를 하든 액세스를 희망하든 해당 사항이 컴파일된 머신 코드에 포함된다는 뜻.
참고: Udemy 자바스크립트 완벽 가이드, https://catch-me-java.tistory.com/11
'Javascript' 카테고리의 다른 글
Javascript: 원시 vs 참조값 (0) | 2023.01.25 |
---|---|
Javascript: 코드 실행의 원리(힙, 스택) (1) | 2023.01.25 |
Javascript: ES6와 ES6의 차이 (0) | 2023.01.25 |
Javascript: Math.floor() (0) | 2023.01.19 |
Javascript: Math.abs() (0) | 2023.01.16 |