https://webkit.org/blog/166/optimizing-page-loading-in-web-browser/
http://ariya.ofilabs.com/2013/04/css-preload-scanner-in-webkit.html
ResourceFetcher를 보면 preloading을 구별하고 있다.
third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
1. HTMLDocumentParser는 근본적으로는 One time pass through 방식으로 동작한다.
HTML 페이지를 Top에서 Bottom까지 한번에 읽고 넘어가지, 다시 뒤로 돌아가지 않는다.
2. 그런데 javascript는 HTML을 생산할 수 있다.
3. javascript가 HTML을 생산하고, HTMLDocumentParser가 다시 뒤로 돌아가기를 하지 않으려면,
결국 javascript가 download 되고(별도 파일이라면), 실행완료 되기를 기다릴 수 밖에 없다.
4. 이 기다림이 동안 페이지 로딩 지연이 발생하게 된다.
5. 때문에 blocking 동안, 별도의 scanner를 돌려서, img, css 등 리소스 파일을 다운받게 한다.
그게 HTMLPreloadScanner이다.
6. 실제 preloading은 ResourceFetcher가 담당한다.