사용자 인터페이스: 주소 표시줄, 뒤로/앞으로 버튼, 북마크 메뉴 등이 포함
브라우저 엔진: UI와 렌더링 엔진 간의 작업을 marshalling
렌더링 엔진: 요청된 콘텐츠를 표시하는 역할을 함
네트워킹: HTTP 요청과 같은 네트워크 호출의 경우, 플랫폼 독립형 인터페이스 뒤에 있는 여러 플랫폼에 서로 다른 구현을 사용
UI 백엔드: 콤보 상자 및 창과 같은 기본 위젯을 그리기 위해 사용됨
JavaScript 인터프리터: JavaScript 코드를 파싱하고 실행하는 데 사용됨
데이터 스토리지: 지속성 레이어. 브라우저는 쿠키와 같은 모든 종류의 데이터를 로컬에 저장할 수 있음
브라우저는 localStorage, IndexedDB, WebSQL, FileSystem과 같은 저장소 메커니즘도 지원
chrome과 같은 브라우저는 렌더링 엔진의 인스턴스를 여러개 실행(탭마다 하나씩)
렌더링 엔진이 네트워킹 레이어에서 요청된 문서의 콘텐츠를 가져오기 시작
렌더링 엔진은 HTML 문서 파싱을 시작하고, Content Tree라는 트리의 요소를 DOM 노드로 변환함 (엔진은 외부 CSS 파일 & 스타일 요소에서 모두 스타일 데이터를 파싱)
렌더링 트리 생성 후, 레이아웃
과정을 거침
페인팅
더 나은 사용자 환경을 위해 렌더링 엔진은 최대한 빨리 콘텐츠를 화면에 표시하려고 시도
렌더링 트리의 빌드 및 레이아웃을 시작하기 전, 모든 HTML이 파싱될 때까지 기다리지 않음
네트워크를 통해 나머지 내용이 전송되기를 기다리는 동시에, 받은 내용의 일부를 먼저 화면에 표시
Gecko
Webkit
Webkit은 요소를 배치하는데, 배치(layout)라는 용어를 사용하지만, Gecko는 리플로(reflow)라고 부름
어태치먼트(Attachment): Webkit이 렌더 트리를 생성하기 위해 DOM 노드와 시각 정보를 연결하는 과정
Gecko는 HTML과 DOM 트리 사이에 콘텐츠 싱크(Content Sink)라고 부르는 과정을 둠
렌더링 엔진 내에서 매우 중요한 프로세스
문서를 파싱 = 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것
파싱: 문서에 작성된 언어 또는 형식의 규칙에 따름 (파싱할 수 있는 모든 형식은 정해진 용어와 구문 규칙에 따라야 함 - 문맥 자유 문법)
인간의 언어는 이런 모습과는 다르기 때문에, 기계적으로 파싱이 불가능
파싱 = 어휘 분석 / 구문 분석 (두 가지로 구분 가능)
어휘 분석: 자료를 토큰으로 분해하는 과정 (토큰 - 유효하게 구성된 단위의 집합체, 용어집)
구문 분석: 언어의 구문 규칙을 적용하는 과정
파서는 보통 2가지 일을 함
자료를 유효한 토큰으로 분해하는 어휘 분석기(또는 토큰 변환기)
언어 구문 규칙에 따라 문서 구조를 분석함으로써 파싱 트리를 생성하는 파서
어휘 분석기는 공백과 줄 바꿈 같은 의미 없는 문자를 제거
파싱 과정은 반복됨
파서는 보통 어휘 분석기로부터 새로운 토큰을 받아서 구문 규칙과 일치하는지 확인함
규칙에 맞지 않으면, 파서는 토큰을 내부적으로 저장하고 토큰과 일치하는 규칙이 발견될 때까지 요청
파서 트리는 최종 결과물이 아님. 파싱은 보통 문서를 다른 양식으로 변환, 컴파일이 그 예
컴파일러: 소스 코드를 기계 코드로 만들며, 파싱 트리 생성 후, 이를 기계 코드 문서로 변환
어휘: 보통 정규 표현식으로 표현
구문: 보통 BNF라고 부르는 형식에 따라 정의
참고: https://d2.naver.com/helloworld/59361
https://web.dev/articles/howbrowserswork?hl=ko#formal_definitions_for_vocabulary_and_syntax
빠른 사이트는 더 좋은 사용자 경험을 제공
웹 성능에 있어, 지연시간과 브라우저가 대부분 싱글 쓰레드로 동작한다는 점의 두 가지 문제가 있음
네트워크 지연시간 = 네트워크를 통해 컴퓨터로 바이트를 전송하는 데 걸리는 시간
웹 최적화 = 페이지 로드가 최대한 빠르게 이루어질 수 있도록 하는 것
웹 페이지를 로딩하는 첫 단계 (사용자가 주소창에 URL을 입력하거나, 링크를 클릭하고, form을 제출하는 등의 동작을 통해 요청을 보낼 때마다 발생)
지연시간과 대역폭은 지연을 일으키는 적
참고