//////
Search
Duplicate

전체적인 추가 개념

브라우저 구조

자바스크립트 엔진
자바스크립트 코드를 해석하고 실행하는 인터프리터 크롬은 v8, 사파리는 webkit
이벤트 루프
자바스크립트 엔진의 뒷편에서 동작하는 장치
call stack(호출 스택)과 콜백 큐를 계속 주시하고 있음
call stack이 비어있으면 콜백 큐에 먼저 들어온 순서대로 콜백 함수들을 호출 스택으로 집어넣음
콜백 큐(태스크 큐)
web API의 콜백 함수들이 대기하는 큐
마이크로 태스크 큐
Promise의 반환 객체가 (then, catch) 대기하는 큐
web API
setTimeout, DOM, Http 요청 등 모두 비동기 요청
작동을 하면 콜백 큐에서 실행 대기
자바스크립트 엔진은 싱글스레드이지만 web API는 멀티스레드로 동작
setTimeout(callback, 0) 실행 과정 : 콜스택이 비어야 콜백큐에 넣어진 요청이 콜스택에 갈 수 있기 때문에, 콜스택에 있는 모든 함수가 실행된 후 setTimeout 실행

브라우저 렌더링

브라우저 실행 과정
1.
렌더링 엔진이 HTML, CSS 파싱 (브라우저 렌더링)
2.
브라우저 엔진이 유저 인터페이스와 렌더링 엔진 연결
렌더링 엔진 동작 과정(Critical Rendering Path)
1.
HTML 태그 토큰화되어 노드 객체로 바뀌고 DOM tree 생성
2.
스타일 CSSOM tree 생성
3.
DOM tree와 CSSOM tree 합친 Render tree 생성
document 객체부터 각 노드 순회하면서 각각에 맞는 CSSOM 찾아서 규칙 적용
meta, display:none 속성은 렌더와 관련 없어서 Render tree에 포함X
4.
Layout (리플로우) - Render tree 배치
뷰포트 내에서 요소들의 정확한 위치와 크기 계산
%나 em 같이 상대적인 단위를 사용한 경우 이 과정에서 정확한 px단위로 변환
5.
Paint (리페인트) - Render tree 그리기
text, image 실제 픽셀로 화면에 그려짐
css 변경 / animation 동작한 경우
리플로우부터 다시 발생: 요소의 크기나 위치가 바뀔 때, 브라우저 창 크기가 바뀔 때(수치를 다시 계산해야 할 때)
리페인트부터 다시 발생 : 배경 이미지나 텍스트 색상, 그림자 등 스타일의 변경 일어날 때(레이아웃의 수치는 변하지 않을 때)

프론트엔드의 비동기 (callback -> promise -> async/await)

Promise
자바스크립트에서 비동기를 간편하게 처리하기 위해 제공하는 객체 Promise 상태
pending : Promise 만들어지고 지정한 operation 수행 중인 상태
fulfilled : operation 성공적으로 완료한 상태
rejected : 파일 찾을 수 없거나 네트워크 에러
콜백함수
다른 함수의 인자로 넘겨지는 함수
클로저
중첩 함수에서 내부 함수가 부모함수에게 있는 변수를 가지고 있고 접근할 수 있는 것
어떤 함수 A에서 선언한 변수 a를 참조하는 내부 함수 B를 외부로 전달할 경우, A의 실행 컨텍스트가 종료된 이후에도 변수 a가 사라지지 않는 현상