로딩템플릿을 제작하면서 폰트 관련 이슈를 마주쳤다.
웹 폰트 suit를 로드하는 과정에서 suit 폰트를 로드하기 전 잠시 기본 폰트가 적용되어 깜박이듯 보이는 이슈가 발생했다.
원인 파악을 위해 알아본 결과 FOIT로 불리는 이슈이다.
FOIT
FOUT
브라우저의 렌더링 과정이다.
T0: 브라우저가 HTML 문서를 요청한다.
T1: HTML 응답이 오면 DOM을 그리고 , CSS/JS 및 기타 리소스를 요청한다.
T2: 모든 CSS 콘텐츠를 수신하여 CSSOM을 만들고 CSSOM을 DOM트리와 결합하여 렌더링 트리를 구성한다. 그리고 이 때 폰트 리소스를 요청한다. ( = 다른 리소스들보다 상대적으로 늦게 로드한다..)
T3: 콘텐츠를 화면에 그리고 이 때 폰트를 사용할 수 없는 상태라면 FOIT, FOUT가 발생하게 되는 것이다.
<link rel="preload" href="/typefesse.woff2" as="font" type="font/woff2" crossorigin>
<head>
위와 같은 preload 태그를 추가하는 방법이다. 이 태그를 추가하면 브라우저에 글꼴 파일을 즉시 로드하도록 하지만 이 방법을 사용하면 현재 페이지에 사용되지 않는 폰트들까지도 모두 로드하기때문에 불필요한 로딩이 생길 수 있으므로 사용하는 폰트가 많은 경우에는 비추다.font-display 속성을 사용하여 폰트 로딩 방법을 지정할 수 있다. font-display의 경우 @font-face에 추가할 수 있다.
나의 경우 디자이너와 상의 후 현재 문제 상황인 FOUT현상을 없애고 차라리 FOIT를 선택하기로 했다.
훌륭한 글 감사드립니다.