브라우저는 요즘 사람들이 가장 많이 사용하는 소프트웨어일 것이다.
대부분이 크롬과 같은 크로미엄 기반의 브라우저를 사용하고 있다.
빠른 속도를 만들어내지 못하고 모바일 생태계에서 살아남지 못한 인터넷 익스플로러의 시대가 끝나고 2012년 이후로 크롬의 시대가 왔다.
아래 그림은 StatCounter 브라우저 통계에 따른 2021.03 ~ 2022.03까지의 브라우저 점유율이다.
크롬이 약 65%로 대부분을 점유하고 있고, 그 뒤를 사파리가 약 19%정도 점유하고 있다.
그 뒤를 Firefox나 Edge가 3~4% 정도로 점유하고 있다. 인터넷 익스플로러가 저~ 아래에 있긴 하다.
오늘은 브라우저에 대해 알아보고 브라우저가 렌더링 되는 과정에 대해 포스팅하려 한다.
우선 브라우저의 구성요소에 대해 살펴보자.
구성요소들을 알고는 있지만 이렇게 확실히 리스트업한 것을 보니 확실히 동작원리에 대한 이해에 도움이 된다.
크롬의 경우 대부분의 브라우저와 달리 각 탭마다 별도의 렌더링 엔진 인스턴스를 유지한다.
따라서 크롬의 각 탭은 독립된 프로세스로 처리된다.
브라우저의 주요 기능으로는 HTML, CSS, JS, 이미지, 폰트, 파일 등 렌더링에 필요한 리소스를 요청하고 서버로부터 응답을 받아 브라우저에 표시하는 것이다. 해당 리소스의 주소는 URI(Uniform Resource Identifier)에 의해 정해진다.
브라우저의 렌더링 과정으로는 아래와 같다.
1. 렌더링에 필요한 리소스를 요청하고 응답을 받는다.
2. 서버로부터 응답된 HTML, CSS를 렌더링 엔진이 파싱하여 DOM과 CSSOM을 생성하고 이를 결합해 렌더 트리를 생성한다.
파싱에 대해서는 다음 포스팅에서 자세히 다룰 예정이다.
3. 브라우저의 자바스크립트 엔진은 서버로부터 응답된 자바스크립트를 파싱하여 AST를 생성하고 바이트코드로 변환하여 실행한다.
(자바스크립트는 DOM API를 통해 DOM이나 CSSOM을 변경할 수 있다. 변경된 DOM과 CSSOM은 다시 결합해 렌더트리로 결합된다.)
while (b ≠ 0){
if (a > b)
a = a − b
else
b = b − a
}
return a
-> 각 노드는 소스코드에서 발생되는 구조
-> 추상적이라는 것은 실제 구문에서 나타나는 모든 세세한 정보를 나타내지 않는다는 의미
4. 렌더 트리를 기반으로 HTML 요소의 레이아웃(위치와 크기)을 계산하고 브라우저 화면에 HTML 요소를 페인팅한다.
자바스크립트 코드에 DOM이나 CSSOM을 변경하는 DOM API가 사용된 경우 DOM이나 CSSOM이 변경된다.
이때, 변경된 DOM과 CSSOM은 다시 렌더 트리로 결합되고 변경된 렌더 트리를 기반으로 레이아웃과 페인트 과정을 거쳐 브라우저의 화면에 다시 렌더링 한다.
이를 Reflow, Repaint라고 한다.
따라서 Reflow와 Repaint가 반드시 순차적으로 동시에 실행되는 것은 아니다. 레이아웃에 영향이 없는 변경은 리플로우 없이 리페인트만 실행된다.
- 모던 자바스크립트 딥다이브 책
https://d2.naver.com/helloworld/59361
https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/#Resources
How Browsers Work: Behind the scenes of modern web browsers - HTML5 Rocks
In this comprehensive primer, you will learn what happens in the browser between when you type google.com in the address bar until you see the Google page on the browser screen.
www.html5rocks.com
[React] React 18 성능 개선 정리 (0) | 2022.06.02 |
---|---|
[React] SSR(Server Side Rendering), CSR(Client Side Rendering), SSG(Static Site (0) | 2022.04.24 |
Selecolor - 프론트엔드 게임 제작 챌린지 (8) | 2022.02.13 |
프론트엔드 개발자 성장 가이드 후기 (0) | 2021.12.25 |
댓글 영역