웹 브라우저는 동기적으로 Javascript(HTML + CSS) 언어를 해석하여 내용을 화면에 보여주는 응용 소프트웨어이다.
Document Object Model(문서 객체 모델)로 브라우저가 html 페이지를 인식하는 방식을 말한다.(트리구조이다.)
렌더링 엔진은 HTML, XML, 이미지 등 요청 받은 내용을 브라우저 화면에 표시한다.
1. 렌더링 엔진은 HTML 문서를 파싱하여 DOM 트리를 구축한다.
2. 외부 CSS 파일과 함께 포함된 스타일 요소를 파싱 합니다.
3. 1번과 2번의 결과물을 합쳐 렌더 트리를 구축한다.
4. 렌더 트리 각 노드에 대해 화면 상에서 배치할 곳을 결정한다.
5. UI 백엔드에서 렌더 트리의 각 노드를 그린다.
렌더링 엔진 중 하나이다. 렌더링 엔진의 기본 동작 과정과 유사하다.
렌더링 엔진이 아닌 자바스크립트 엔진이 처리한다.
HTML 파서는 <script>
태그를 만나면 Javascript 코드를 실행하기 위해 DOM 생성 프로세스를 중지하고 자바스크립트 엔진으로 권한을 넘긴다.
제어 권한을 넘겨받은 자바스크립트 엔진은 <script>
태그 내의 Javascript 코드 또는 src
속성에 정의된 Javascript 파일을 로드하고 파싱하여 실행한다.
Javascript의 실행이 완료되면 다시 HTML 파서로 제어 권한을 넘겨서 중지했던 시점으로 돌아가 DOM 생성을 재개한다.
브라우저는 동기적으로 HTML, CSS, Javascript를 처리한다.
하지만 자바스크립트 엔진에 제어 권한이 있을 때, Javascript 코드가 완성되지 않은 DOM을 조작하게 된다면 에러가 발생할 것이다. 따라서 HTML 파일에서 Javascript 코드를 <body>
태그 하단에 위치시키는 이유이다.
항상 중요하다고 말만 들었고 제대로 정리해본적은 없었는데 이번에 대략적으로나마 정리할 수 있어서 좋았다.
프론트엔드 면접에서 종종 렌더링 과정 어떻게 되는지 물어볼 수 있음.
언젠가는 도움이 되는 내용이다.
추천해주신 링크:
https://yozm.wishket.com/magazine/detail/1338/
<훑어보기>
https://gyoogle.dev/blog/web-knowledge/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%20%EB%8F%99%EC%9E%91%20%EB%B0%A9%EB%B2%95.html
https://bbangson.tistory.com/87
<자세한 내용>
https://velog.io/@thyoondev/%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%9D%98-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
<동기vs비동기>
https://velog.io/@emawlrdl/%EB%8F%99%EA%B8%B0%EC%A0%81-vs-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81
https://velog.io/@hyundong_kk/%EB%8F%99%EA%B8%B0%EC%A0%81-vs-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81