Composable Caching with Next.js
Bài tóm tắt Vercel 2025 4. Điều chỉnh Độ khó: Trung bình
Vercel · 2025 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc
Vercel vừa làm framework Next.js vừa bán nền tảng chạy nó; nhận định về sản phẩm của họ trong trang này đều là "theo Vercel".
Bối cảnh
- Bài thứ hai sau Vercel 2024: vì sao
use cachelà một directive (nhưuse client) mà không phải hàmcache().
Thay đổi chính
- Compiler biến hàm có
use cachethành server function có cache, và các phụ thuộc của nó thành khoá:getUser(id)thìidthuộc khoá. - Closure: hàm lồng trong component bắt biến cha (như
idtừ props); compiler thấy và tự đưa vào khoá. Theo Vercel,cache()ở runtime không nhìn được closure, phải ghi khoá tay, quên thì va chạm cache hoặc dữ liệu cũ, và biến nhạy cảm lọt vào khoá có thể gây cache poisoning. - Đầu vào không serialize được (như
childrenlà JSX) nằm ngoài khoá và được thay bằng reference rồi điền lại ở caller, nên chỉ cache<Profile>cònchildrenvẫn động. Bài ví với mẫu "donut": vỏ đã cache, lỗ giữa điền lúc chạy. - Vòng đời
cacheLife('hours'); tag gắn được sau khi fetch rồirevalidateTag.
Bài học cho SWE
- Khoá cache sai là nguồn lỗi chính; để compiler suy khoá từ phụ thuộc đáng tin hơn kỷ luật tay.
- Phần không cache được luồn qua bằng tham chiếu để khỏi vô hiệu cả khối.
Liên quan
#Next.js#use cache#directive#cache key#closure#serialization#React Server Components#cacheLife#cacheTag#donut pattern
Được nhắc tới trong
Chủ đề (2)
Công ty (1)
Bài tóm tắt (2)