August 13, 2021
월드와이드웹(WWW)에서 정보를 검색, 표현, 탐색하기 위한 소프트웨어
브라우저의 핵심 기능은 사용자가 선택한 자원을 서버에 요청하고 브라우저에 표시하는 것
💡 자원 Resource
사용자가 원하는 웹페이지를 구성하기 위해 필요한 파일들 (HTML, CSS, JS, 이미지 …)
브라우저는 HTML과 CSS 명세 (웹 표준화 기구인 W3C(World Wide Web Consortium)에서 정해진 명세) 에 따라 HTML 파일을 해석해서 표시
UI User Interface 사용자 인터페이스 주소 표시 줄 / 이전 버튼과 다음 버튼 / 북마크 / 새로 고침, 정지, 홈 버튼 등…
요청한 페이지를 보여주는 창을 제외하고 사용자와 상호작용하는 나머지 부분
Rendering Engine 렌더링 엔진 요청한 콘텐츠를 브라우저 화면에 표시 HTML과 CSS를 파싱하여 웹페이지를 화면에 표시
⚙ Rendering Engine의 목표
- HTML, CSS, JS, 이미지 등 웹페이지에 포함된 모든 요소들을 화면에 보여준다
업데이트가 필요할 때, 효율적으로 렌더링을 할 수 있도록 자료구조를 생성한다
- 사용자 동작으로 인해 입력이 발생하거나, 스크롤이 생기거나, 애니메이션이 동작할 때
- 비동기 요청으로 인한 데이터 로딩이 발생했을 때
🧭 브라우저마다 다른 렌더링 엔진
- Webkit (Safari)
- Gacko (Firefox)
Blink (Chrome)
- 예전에는 Webkit을 사용하다가 2013년부터 Webkit에서 갈라져나온 Blink를 사용
Networking 네트워크
HTTP 요청과 같은 네트워크 호출에 사용, 각종 네트워크 요청을 수행, 서버와 통신
JavaScript Interpreter 자바스크립트 해석기
자바스크립트 코드를 실행하는 인터프리터
Chrome의 경우 V8을 사용
💡 JavaScript는 렌더링 엔진이 아닌 JavaScript Interpreter가 처리한다
- HTML 파서는
<script>
태그를 만나면 자바스크립트 코드를 실행하기 위해 DOM 생성 프로세스를 중지하고 자바스크립트 엔진으로 제어 권한을 넘긴다- 제어 권한을 넘겨받은 자바스크립트 엔진은
<script>
태그 내의 자바스크립트 코드 or<script>
태그의 src에 정의된 js 파일을 로드하고 파싱하여 실행한다- 자바스크립트의 실행이 완료되면 다시 HTML 파서로 제어 권한을 넘겨 브라우저가 중지했던 시점부터 DOM 생성을 재개한다
➡ 그러므로 HTML 요소를 다 처리한 이후, 자바스크립트를 처리할 수 있도록<body>
태그 하단에<script>
태그를 위치시키는 것이 좋다
🔧 JavaScript 코드는 body 태그 하단에 위치하면 script 로딩 지연으로 인해 동기적으로 동작하는 브라우저 동작에 blocking이 발생하지 않아 페이지 로딩 시간이 단축된다.
💄 CSS 코드는 head 태그 안에 위치하여 렌더링 처리 시에 브라우저가 더 빨리 참고할 수 있게 하는 것이 좋다.
UI Backend
UI를 처리할 수 있는 백엔드 영역
Data Persistence 자료 저장소
자료를 저장하는 계층
localStorage나 Cookie와 같이 보조 기억장치에 데이터를 저장하는 파트
DOM tree 생성
브라우저의 렌저링 엔진이 HTML 코드를 읽고 파싱하여 DOM tree를 생성
HTML 코드
를 어휘분석을 통해 HTML5 표준에 지정된 고유한 토큰
으로 변환토큰
을 해당 속성과 규칙을 정의하는 Node
로 변환Node
가 서로 연관성을 가질 수 있도록 DOM tree
를 생성Render tree 생성 화면에 표시되어야 할 모든 Node의 컨텐츠, 스타일 정보를 포함하는 tree
CSSOM
을 구성DOM 트리
와 CSSOM
을 결합하여 Render tree
생성Layout(reflow)
뷰포트 내에 생성된 render tree의 각 노드들의 정확한 위치와 크기를 결정
다시 Layout이 발생 주로 요소의 크기나 위치가 바뀔 때, 혹은 브라우저 창의 크기가 바뀌었을때 다시 발생
레이아웃 수치를 다시 계산해서 배치를 해야하기 때문에, 레이아웃 과정이 다시 발생하고 페인트와 레이어 합성 과정까지 다시 거쳐야함
Paint부터 다시 발생하는 경우 주로 배경 이미지나 텍스트 색상, 그림자 등 레이아웃의 수치를 변화시키지 않는 스타일의 변경이 일어났을 때 발생
레이아웃 과정이 다시 발생하지 않기 때문에 성능상으로 좀 더 이점
레이어의 합성만 다시 발생하는 경우 레이어의 합성(Composite)만 발생하기 때문에 성능적으로 가장 큰 이점
👀 https://csstriggers.com/ 에서
브라우저, CSS요소에 따라 3가지 중 어떤 경우가 발생하는지 알 수 있음!
부스트코스 웹 풀스택 browser의 동작 https://www.boostcourse.org/web316/lecture/254256