gitignore 의 *.md / .claude/ 차단을 풀어 다음 파일을 git 으로 추적. - /CLAUDE.md, /AGENTS.md (루트 에이전트 가이드) - .agents/**/*.md (skills 문서 95개) - .claude/settings.json (Claude Code 프로젝트 설정) .claude/worktrees/ 는 git worktree 메타이므로 신규 ignore 라인으로 제외. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
86 lines
2.5 KiB
Markdown
86 lines
2.5 KiB
Markdown
---
|
|
title: Use React DOM Resource Hints
|
|
impact: HIGH
|
|
impactDescription: reduces load time for critical resources
|
|
tags: rendering, preload, preconnect, prefetch, resource-hints
|
|
---
|
|
|
|
## Use React DOM Resource Hints
|
|
|
|
**Impact: HIGH (reduces load time for critical resources)**
|
|
|
|
React DOM provides APIs to hint the browser about resources it will need. These are especially useful in server components to start loading resources before the client even receives the HTML.
|
|
|
|
- **`prefetchDNS(href)`**: Resolve DNS for a domain you expect to connect to
|
|
- **`preconnect(href)`**: Establish connection (DNS + TCP + TLS) to a server
|
|
- **`preload(href, options)`**: Fetch a resource (stylesheet, font, script, image) you'll use soon
|
|
- **`preloadModule(href)`**: Fetch an ES module you'll use soon
|
|
- **`preinit(href, options)`**: Fetch and evaluate a stylesheet or script
|
|
- **`preinitModule(href)`**: Fetch and evaluate an ES module
|
|
|
|
**Example (preconnect to third-party APIs):**
|
|
|
|
```tsx
|
|
import { preconnect, prefetchDNS } from 'react-dom'
|
|
|
|
export default function App() {
|
|
prefetchDNS('https://analytics.example.com')
|
|
preconnect('https://api.example.com')
|
|
|
|
return <main>{/* content */}</main>
|
|
}
|
|
```
|
|
|
|
**Example (preload critical fonts and styles):**
|
|
|
|
```tsx
|
|
import { preload, preinit } from 'react-dom'
|
|
|
|
export default function RootLayout({ children }) {
|
|
// Preload font file
|
|
preload('/fonts/inter.woff2', { as: 'font', type: 'font/woff2', crossOrigin: 'anonymous' })
|
|
|
|
// Fetch and apply critical stylesheet immediately
|
|
preinit('/styles/critical.css', { as: 'style' })
|
|
|
|
return (
|
|
<html>
|
|
<body>{children}</body>
|
|
</html>
|
|
)
|
|
}
|
|
```
|
|
|
|
**Example (preload modules for code-split routes):**
|
|
|
|
```tsx
|
|
import { preloadModule, preinitModule } from 'react-dom'
|
|
|
|
function Navigation() {
|
|
const preloadDashboard = () => {
|
|
preloadModule('/dashboard.js', { as: 'script' })
|
|
}
|
|
|
|
return (
|
|
<nav>
|
|
<a href="/dashboard" onMouseEnter={preloadDashboard}>
|
|
Dashboard
|
|
</a>
|
|
</nav>
|
|
)
|
|
}
|
|
```
|
|
|
|
**When to use each:**
|
|
|
|
| API | Use case |
|
|
|-----|----------|
|
|
| `prefetchDNS` | Third-party domains you'll connect to later |
|
|
| `preconnect` | APIs or CDNs you'll fetch from immediately |
|
|
| `preload` | Critical resources needed for current page |
|
|
| `preloadModule` | JS modules for likely next navigation |
|
|
| `preinit` | Stylesheets/scripts that must execute early |
|
|
| `preinitModule` | ES modules that must execute early |
|
|
|
|
Reference: [React DOM Resource Preloading APIs](https://react.dev/reference/react-dom#resource-preloading-apis)
|