브라우저 아키텍쳐 구현 사항에 어떤 프로세스를 가져야한다는 표준은 없기때문에 어떤 프로세스는 하나의 프로세스에 여러 스레드가 있을 수도 있고, 스레드를 조금만 사용하는 프로세스를 여러 개 만들어 IPC로 통신할 수도 있습니다. 위 요소가 모두 동급의 프로세스 혹은 스레드 라기 보단 이러한 역할을 하는 요소들이 존재한다는 식으로 이해하면 좋습니다.
DNS(Domain Name System)는 범국제적 단위로 웹사이트의 IP 주소와 도메인 주소를 이어주는 환경/시스템
TLS(Transport Layer Security), TLS 프로토콜은 인터넷을 통한 통신 보안을 제공하며 클라이언트/서버 애플리케이션이 비밀이 유지되고 안정적인 방식으로 통신할 수 있도록 해줍니다
CORB란 Ajax 호출을 필요로 하는 기능에서 보안상 이유로 동일 서버 이외에는 접근할 수 없도록 한것
2단계 내비게이션 시작시 UI 스레드가 네트워크를 호출하면서 렌더러 프로세스를 먼저 찾거나 네트워크요청과 동시에 렌더러 프로세스를 시작할 수 있습니다. 이런 방식은 모든 것이 예상대로 잘 진행된다면 네트워크 스레드가 데이터를 받을 때 이미 렌더러 프로세스는 준비 상태에 있게 되지만 만약 다른 사이트로 리디렉션이 이루어져 다른 프로세스가 필요하게 되면 미리 준비한 프로세스가 사용되지 않을 수 있습니다.
렌더링 엔진은 렌더러 프로세스의 한 요소입니다.
렌더링 엔진은 HTML, XML, 이미지 등 요청 받은 내용을 브라우저 화면에 표시하는 엔진으로 각 브라우저마다 렌더링 엔진이 다르기 때문에 웹에서 CSS를 적용할 때 아래와 같이 접두어가 붙은 것을 종종 볼 수 있습니다.
-moz-border-radius: 1em; // 파이어폭스 브라우저에 적용
-ms-border-radius: 1em; // 익스플로어에 적용, 보통 생략
-o-border-radius: 1em; // 오페라에 적용
-webkit-border-radius: 1em; // 구글, 사파리 브라우저에 적용
렌더링 엔진의 종류
Blink는 구글이 Webkit을 대체하기 위해 자체적으로 개발한 엔진입니다.
언어의 너그러운 속성
과 HTML 오류에 대한 브라우저의 관용
, 변경에 의한 재파싱
으로 인해 정규 파서로 파싱할 수 없어 브라우저는 HTML 파싱을 위해 별도의 파서를 생성합니다.<html>
<body>
<p>Hello World</p>
<div><img src="example.png" /></div>
</body>
</html>
위 과정을 렌더링 파이프라인이라고 부르며 1프레임마다 이 프로세스가 거듭된다고 보면 됩니다.(오늘날 대부분의 기기는 60프레임으로 작동) 렌더링 파이프라인에서 중요한 점은 각 단계에서 이전 작업의 결과가 새 데이터를 만드는데 사용된다는 점입니다.
여기서 성능을 최적화하기 위해서는 가급적 전체 파이프라인을 다시 호출하는 일을 적게 만들어야 합니다.JS/CSS > 스타일 > 레이아웃 > 페인트 > 합성
레이아웃 너비, 높이, 왼쪽 또는 상단 위치 등 요소의 기하학적 형태에 영향을 주는 ‘layout’ 속성을 변경하면 브라우저가 다른 모든 요소를 확인하고 페이지에 대해 '리플로우’를 수행해야 합니다. 영향을 받은 영역이 있으면 다시 페인트해야 하고 최종적으로 페인트한 요소는 다시 합성해야 합니다.JS/CSS > 스타일 > 페인트 > 합성
페이지의 레이아웃에 영향을 주지 않는 배경 이미지, 텍스트 색상 또는 그림자 등의 ‘paint only’ 속성을 변경하면, 브라우저가 레이아웃을 건너뛰되 페인트 작업은 여전히 수행합니다.JS/CSS > 스타일 > 합성
레이아웃과 페인트가 필요 없는 속성을 변경하면 브라우저가 합성 단계로 건너뜁니다. 이 최종 버전은 앱의 수명 주기에서 애니메이션이나 스크롤처럼 많은 부담을 주는 시점에 가장 이상적이고 비용이 가장 적게 드는 버전입니다.** 주어진 CSS 속성을 변경하는 위 세 가지 경우 중 어느 버전이 트리거될지 알고 싶은 경우 csstriggers.com 을 통해 어떤 속성 어떤 과정에 영향을 주는지 알 수 있습니다.
히트 테스트는 렌더러 프로세서에서 생성된 페인트 기록의 데이터를 사용합니다.
<script>
태그를 만나면 JavaScript 코드를 실행하기 위해 DOM 생성 프로세스를 중지하고 자바스크립트 엔진으로 권한을 넘깁니다. 제어 권한을 넘겨받은 자바스크립트 엔진은 <script>
태그 내의 JavaScript 코드 또는 src 속성에 정의된 JavaScript 파일을 로드하고 파싱하여 실행합니다.