# PWAμ μΊμ±μ΄λ?
λΈλΌμ°μ μ μΊμ±(Cache-Control)κ³Όλ λ€λ₯΄κ² λΈλΌμ°μ μ μΊμ μ€ν 리μ§(Cache Storage)λ₯Ό νμ©νμ¬ μΉ λ¦¬μμ€λ₯Ό μΊμ±νλ κΈ°μ μ λλ€.
# μν¬λ°μ€ μΊμ± μ λ΅
μν¬λ°μ€λ‘ μΉ μλΉμ€λ₯Ό μΊμ±ν λλ λ€μ 2κ°μ§ λ°©λ²μ μμμΌ ν©λλ€.
- ν리 μΊμ±(Precaching)
- λ°νμ μΊμ±(Runtime Caching)
# ν리 μΊμ±
ν리 μΊμ±μ΄λ μΉ μ ν리μΌμ΄μ
μ μ μνκΈ° μ μ 미리 μΊμ±ν΄λλ μΊμ± λ°©λ²μ λ§ν©λλ€.
μν¬λ°μ€ CLIλ‘ μμ±ν κ²°κ³Όλ¬Όμ΄λ workbox-build
λΌμ΄λΈλ¬λ¦¬μμ μλμ κ°μ μ½λλ₯Ό 보면 ν리 μΊμ±μ΄λΌκ³ μ΄ν΄νμλ©΄ λ©λλ€.
// workbox cli
module.exports = {
"globDirectory": "dist/",
"globPatterns": [
"**/*.{css,ico,html,js,json,png}"
],
"swDest": "dist/sw.js"
};
// workbox-build lib
workboxBuild.generateSW({
globDirectory: 'build',
globPatterns: [
'**/*.{html,json,js,css}',
],
swDest: 'build/sw.js',
});
# λ°νμ μΊμ±
λ°νμ μΊμ±μ΄λ μΉ μ ν리μΌμ΄μ μ λμ μν¬ λ λ°μνλ μμ²μ λν΄ μλ² μλ΅μ μΊμ μ€ν 리μ§μ μ μ₯νλ μΊμ± λ°©λ²μ λ§ν©λλ€. λ³΄ν΅ μ΄λ―Έμ§μ κ°μ 리μμ€λ νμΌ μ©λμ΄ μ»€μ μ²μ νμ΄μ§ μ μν λ μλΉμ€ μ컀 μ€μΉ μκ°μ΄ κΈΈμ΄μ§λ―λ‘ λ°νμ μΊμ±μΌλ‘ νλκ² μ’μ΅λλ€.
// workbox-build lib
workboxBuild.generateSW({
// ...
runtimeCaching: [{
urlPattern: /\.(?:png|jpg|jpeg|svg)$/,
handler: 'CacheFirst',
options: {
cacheName: 'my web app images',
expiration: {
maxEntries: 10,
},
},
}],
});
# μΊμ± μ λ΅
μλΉμ€ μ컀μ μΊμ± μ λ΅μ λ€μ 5κ°κ° μμ΅λλ€.
- Cache First : λ€νΈμν¬ μμ²κ³Ό μΊμ± μ€ νμ μΊμλ₯Ό λ¨Όμ μ κ·Όνλ λ°©μ
- Cache Only : μΊμ± νμΌλ§ νμΈνκ³ μμΌλ©΄ μλ¬λ₯Ό λ±λ λ°©μ
- Network First : νμ μΊμ±λ³΄λ€λ λ€νΈμν¬ μμ²μ λ¨Όμ μ§ννλ λ°©μ
- Network Only : ν΄λΉ νμΌμ λν΄μλ μΊμ± νμΌμ μ 무μ κ΄κ³ μμ΄ νμ λ€νΈμν¬ μμ²λ§ νλ λ°©μ
- StaleWhileRevalidate : μΊμ±μ λ¨Όμ μλνκ³ μμΌλ©΄ λ€νΈμν¬ μμ²μ μ§ννλ λ°©μ. νλ‘ν μ΄λ―Έμ§μ κ°μ΄ μμ£Ό μ λ°μ΄νΈ λλ©΄μ μ΅μ λ°μ΄ν°κ° μλμ΄λ λλ λ°μ΄ν° μ μ©νλ©΄ μ’μ
# μ°Έκ³ μλ£
β Workbox General Guide β