"매 render-blocking = First Paint 까지 매 다운로드/parse 필수 리소스". 매 head 안 sync <script> + 매 default <link rel="stylesheet"> — 매 둘 다 차단. 매 2026 modern = 매 critical CSS inline + defer/async script + media query split + 매 LCP 최적화.
매 핵심
매 차단 리소스
<script src> (no defer/async) — 매 HTML parse 차단.
<link rel="stylesheet"> — 매 render 차단 (parse 차단 의 X).
@import in CSS — 매 추가 차단.
Web fonts — 매 FOIT/FOUT 매 paint 지연.
매 비차단 만들기
<script defer> — DOMContentLoaded 직전 실행, parse 차단 X.
<script async> — 다운로드 즉시 실행, parse 차단 가능.
<link rel="preload"> — early discovery.
media attribute — 매 print/non-matching media — 매 비차단.
Critical CSS inline + 매 rest async load.
매 영향 metric
FCP (First Contentful Paint).
LCP (Largest Contentful Paint).
TBT (Total Blocking Time).
💻 패턴
Defer vs async
<!-- 매 GOOD — 매 page-essential, parse 비차단 --><scriptdefersrc="/app.js"></script><!-- 매 GOOD — 매 independent (analytics) --><scriptasyncsrc="https://analytics.example.com/track.js"></script><!-- 매 BAD — 매 parse 차단 --><scriptsrc="/app.js"></script>
Critical CSS inline
<head><style>/* 매 above-the-fold 만 — 매 14KB 이하 — 매 1RTT */body{margin:0;font-family:system-ui;}.hero{min-height:60vh;background:#111;color:#fff;}</style><linkrel="preload"href="/main.css"as="style"onload="this.onload=null;this.rel='stylesheet'"><noscript><linkrel="stylesheet"href="/main.css"></noscript></head>
media query split
<!-- 매 print — 매 즉시 비차단 --><linkrel="stylesheet"href="print.css"media="print"><!-- 매 wide screen 만 — small 매 비차단 --><linkrel="stylesheet"href="desktop.css"media="(min-width: 1024px)">
Preload critical font
<linkrel="preload"href="/fonts/Inter.var.woff2"as="font"type="font/woff2"crossorigin><style>@font-face{font-family:'Inter';src:url('/fonts/Inter.var.woff2')format('woff2-variations');font-display:swap;/* 매 FOUT — 매 paint 차단 X */}</style>