Caching Shopify GraphQL: Hướng dẫn thực hành
GraphQL không hoạt động giống như REST. Bạn không thể cache theo URL. Trong REST, một endpoint tương ứng với một mục cache. Trong GraphQL, một endpoint xử lý mọi thứ. Hai yêu cầu gửi đến cùng một URL có thể trả về các dữ liệu khác nhau.
Để cache GraphQL một cách chính xác, cache key của bạn phải bao gồm:
- Truy vấn (query)
- Các biến (variables)
- Ngữ cảnh người dùng (locale hoặc phân khúc người mua)
Sử dụng các lớp (layers) để xây dựng một hệ thống nhanh chóng:
- Client cache: Để tái sử dụng phiên làm việc trong trình duyệt.
- Edge cache: Cho các trang cửa hàng công khai.
- App cache: Cho dữ liệu dùng chung trên máy chủ của bạn.
- Persisted queries: Cho các key ổn định dựa trên mã băm (hash).
Hãy điều chỉnh thời gian cache phù hợp với tốc độ thay đổi của dữ liệu.
Cache các mục này trong thời gian dài:
- Chi tiết sản phẩm
- Bộ sưu tập (Collections)
- Cài đặt cửa hàng
Cache các mục này trong thời gian ngắn:
- Giá cả
- Tình trạng tồn kho
Tuyệt đối không cache các mục này:
- Giỏ hàng
- Quy trình thanh toán
- Giá dành riêng cho từng khách hàng
Nếu bạn phục vụ các cửa hàng B2B, bạn phải bao gồm ID công ty trong cache key. Nếu không, Khách hàng A có thể nhìn thấy giá hợp đồng của Khách hàng B.
Sử dụng ba phương pháp sau để quản lý tính mới (freshness) của dữ liệu:
- TTL (Time-based): Thiết lập thời gian hết hạn. Cách này đơn giản nhưng bạn thường phải dự đoán.
- Webhooks (Event-based): Đây là cách chính xác nhất. Khi một sản phẩm được cập nhật, Shopify sẽ gửi một webhook. Hãy sử dụng webhook đó để xóa mục cache cũ của bạn.
- Stale-while-revalidate: Phục vụ dữ liệu cũ ngay lập tức trong khi bạn làm mới cache ở chế độ nền.
Hãy xây dựng các trình xử lý webhook đáng tin cậy. Nếu một webhook thất bại, cache của bạn sẽ bị cũ (stale). Hãy sử dụng cơ chế thử lại (retries) để ngăn chặn điều này.
Tập trung vào các chỉ số sau để xem chiến lược của bạn có hiệu quả hay không:
- Hit ratio: Hãy hướng tới tỷ lệ hit cao.
- Latency: Thời gian phản hồi của bạn nên giảm xuống.
- API calls avoided: Tỷ lệ hit cao hơn đồng nghĩa với chi phí thấp hơn.
- Stale incidents: Mục tiêu của bạn là không có sai sót về giá hoặc báo cáo tồn kho do dữ liệu cũ.
Hãy phân lớp các cache của bạn. Điều chỉnh thời gian hết hạn phù hợp với độ biến động của dữ liệu. Sử dụng webhooks để xóa dữ liệu cũ. Xây dựng các key tôn trọng tính cá nhân hóa.
Nguồn: https://dev.to/masadashraf/caching-shopify-graphql-a-practical-guide-for-developers-33k8