HTML, CSS, Javascript
contents -> style -> action 순으로 발전
화면을그리는 방법
Nodes, DOM의 차이
- inline style은 DOM을 생성할 때 attribute이므로 바로 붙어버린다. (CSSOM 에 업데이트하고 바로 DOM에 바로 붙음)
- 항상 화면을 싹 다 읽고 나서 화면을 그림.
- HTML을 다 읽었다?
- css 중 화면에 보여지지 않는 애들은 랜더 트리에서 빠져야됨
- 레이아웃 단계에서 cpu 단계가 가장 많다. -> 따라서 재랜더링 하지 않는 방향을 추구
- 3D 레이어 단계 : gpu에게 위임 (계산이 빠름)
- FOUC : css를 async 하게 로딩하려고 시도했을 때
- domContentLoaded
document.addEventListener('domContentLoaded', ()=>{});
모든 돔 컨텐츠가 생성되면 js 함수를 실행해라
- 항상 돔 컨첸트가 생성되지 않았을 수 있음을 인지해야함.
핵심
HTML은 완전해야한다.
HTML이 완전히 로드가 되어야 완벽하게 다른 것들이 로드 될 수 있다. DOM + CSSOM -> lendering tree -> layout, painting
DOM이 완전히 그려져야지 js가 정상 실행되는 것이 보장된다.
-
FOUC 방지 : css는 상단(head tag)
- head tag에는 실제 컨텐츠가 아닌 애들이 들어감 (meta tag 등)
- head는 화면에 노출안되고, 가장먼저 스타일을 로딩하려고 그럼
- 무조건 헤더에 넣고 비동기처리는 하지 않는다.
-
js가 head에 있는 것은 anti 패턴임 (레거시)
-
js는 npm package로 제공하는 것이 좋음
- npm 번들안에 어떤 것들이 어떤 순서로 로딩될 지 정의가 되어있으므로 실행 순서를 관리할 수 있다.
- body 태그의 제일 마지막에 넣는게 보편적임
리액트가 빌드된걸 보면.. index.html.. 위와같은 규칙으로 적용되어 있을 것이다.
도메인 샤딩
- 하나의 도메인에 대해 http가 열 수 있는 소켓이 제한이 있음 (브라우저마다 다름) -> js, css의 개수, 서빙 위치에 따라서 해당 도메인으로 요청.. 소켓 제한 때문에 로딩 시간이 길어질 수 있음 (양이 많은게 아니고.. 개수가 많아서 소켓 열고 닫는데 걸리는 시간이 길다.)
- 도메인 샤딩을 한다고 무한정 늘어나는 것은 아님
- 같은 도메인으로 열 수 있는 커넥션 개수 고정 but 커넥션 전체도 소켓 제한 있음!!! (무한정으로 만들 수 없음)
- 최대한 많이 열어보자
- 이미지 등은 cdn에서 주게한다... 이 때 cdn 도메인을 두 개로 분리(js/css)
- aws에서 보면, cloud front라는 도메인이 있는데 이 앞에 route53을 이용, 추가적인 도메인 붙일 수 있음 -> 같은 cdn인데 도메인을 다르게 팔 수도 있음
- 도메인별 캐싱.. 회피할 수 있음