사용자가 웹 서비스를 이용하다 다른 주소로 이동할 때 브라우저가 제일 먼저 실행
사용자가 웹 서비스를 이용하다 다른 주소로 이동할 때 브라우저가 제일 먼저 실행하는 단계로 페이지가 표시될 떄 이벤트가 할당되고 메모리를 사용하게 되는데 이 메모리를 더이상 사용하지 않을 때(페이지를 떠날 때) 메모리를 해제해야한다. 필요없는 메모리를 해제(가비지 컬렉션)하지 않으면 브라우저가 응답 없음 상태가 되거나 실행 속도가 급격히 느려지게 된다.
DOM의 생성과 삭제가 많거나, 한 페이지에 통신이 많거나, 이벤트 바인딩 수가 많은 페이지 혹은 사용자의 체류 시간이 긴 페이지를 개발할 때는 필요없는 변수나 오브젝트 삭제, 이벤트 해제 등을 활용해 메모리를 관리한다.
사용자가 요청한 URL에서 다른 URL로 다시 보내는 단계
리다이렉트가 발생하면 301 혹은 302 코드를 반환하는데 이는 HTTP 요청을 완수하기 위해서는 user agent 가 추가적으로 문언가를 해야하다는 것을 의미하며 어떤 자원도 다운로드 하지 않고 브라우저에 일시적으로 빈 페이지가 보인다.
URL 뒤에 trailing slash를 넣으면 더 빠른 속도로 리소스를 찾을 수 있다.
*트레일링 슬래시를 URL 끝에 붙이는 것은 해당 URL 리소스가 디렉토리(directory)임을 의미하며 붙이지 않은 것은 해당 URL 리소스가 파일(file)임을 의미한다.
트레일링 슬래시가 없을 경우 서버는 해당 리소스를 우선 파일로 간주하여 해당 이름의 파일이 존재하는지 확인하고 없을 경우 디렉토리를 확인한다. 그 후 디렉토가 있으면 그 안의 기본파일을 확인한다.
트레일링 슬래시가 있을 경우 서버는 해당 해당 이름의 디렉토리를 확인하고 디렉토리가 있으면 그 안의 기본 파일을 확인하기 때문에 디렉토리 리소스를 요청하는 경우 트레일링 슬래시를 명시한다면 파일 확인을 하는 동작을 생략할 수 있다.
파일 리소스에 트레일링 슬래시를 붙일 경우 디렉토리를 확인하고 디렉토리가 없을 경우 동명의 파일을 확인하지 않기 때문에 404 에러 페이지를 보게된다.https://www.google.com/example/ -> 디렉토리 https://www.google.com/example -> 파일
브라우저의 캐시에 데이터가 있는지 확인한다.
리다이렉트 작업을 마치고 HTTP 요청을 처리하기 위한 준비가 끝나면 먼저 서버로 요청을 보내게 된다. 서버에서 응답이 오면 개별요소(이미지, 스타일시트, 자바스크립트)가 사용자 PC에 있는지 캐시 데이터를 찾게 된다. (캐시 데이터의 종류에는 쿠키, 이미지, 스크립트, 스타일시트가 있다.)
성능 향상을 위한 가장 효과적인 방법을 브라우저와 서버 사이의 통신을 최대한으로 줄이는 것이며 이를 위한 캐시를 잘 활용해야한다.
브라우저가 네트워크와 통신해서 웹페이지와 구성 요소를 다운로드하는 단계
Blocked
브라우저에서 리소스를 호출하기 전에 소요되는 대기시간으로 브라우저 캐시를 확인하는 시간과 네트워크에 연결하기 전에 소요되는 준비시간으로 이뤄진다.
네트워크에 연결하기 전에 소요되는 대기시간은 브라우저 동시 연결 개수와 밀접한 관련이 있으며 도시 연결 개수가 많을 수록 대기 시간은 짧아진다.
DNS
TCP
Request
wait
Response
TTFB(Time To First Byte)
Cache Read
위 이미지에 따른 처리 과정을 보자면
Document Object Modl은 브라우저가 웹 페이지를 잘 핸들링 하기 위해 필요한 객체이다. 브라우저는 수신받은 HTML을 가지고 Bytes>Caracters>Tokens>Nodes>DOM의 과정을 거쳐 DOM Tree 를 만든다.
수신된 CSS 규칙을 브라우저가 이해하고 처리할 수 있는 형식으로 변환하며 HTML과 동일한 프로세스가 적용되며 마지막 DOM 부분만 CSSOM으로 대체된다.
DOM은 컨텐츠, CSSOM은 스타일 규칙을 설명하는 독립적인 개체이다. 각각의 개체를 가지고 화면에 픽셀을 찍기 위해서는 두 객체를 합쳐 Render Tree 를 만들어야한다.
스크립트 태그, 메타 태그, display none 속성을 가진 일부 노드는 표시되지 않으며 렌더링된 출력에 반영되지 않으므로 생략된다.
필요에 따라 1개 이상의 레이어가 만들어지며 레이어 중간에 GPU 처리가 필요하면 graphic layer 가 만들어진다.
표시된 노드에 대해 적절하게 일치하는 CSSOM 규칙을 찾아 적용한다.
표시된 노드를 콘텐츠 및 계산된 스타일과 함께 내보낸다.
노드와 노드의 스타일이 표시된 화면의 정확한 위치 및 크기를 계산한다. 페이지에서 각 객체의 정확한 크기와 위치를 파악하기 위해 브라우저는 렌더 트리 루트에서부터 탐색하며 각 노드의 box type을 확인한다. Type이 block 이면 세로로 Inline이면 가로로 box 의 위치를 계산한다.
레이아웃 과정이 완료되면 브라우저가 pain 이벤트를 발생히켜 노드를 픽셀로 변화한다. 레이아웃 과정에서 render layer 가 2개 이상 생성되면 각각의 layer를 painting 한 뒤 하나의 이미지로 composite 하는 과정을 추가로 거쳐 브라우저에 표현한다.