Lưu trữ Firebase sử dụng CDN toàn cầu mạnh mẽ để làm cho trang web của bạn nhanh nhất có thể.
Mọi nội dung tĩnh được yêu cầu sẽ tự động được lưu vào bộ đệm trên CDN . Nếu bạn triển khai lại nội dung trang web của mình, Dịch vụ lưu trữ Firebase sẽ tự động xóa tất cả nội dung tĩnh đã lưu trong bộ nhớ cache của bạn trên CDN cho đến khi có yêu cầu tiếp theo.
Tuy nhiên, do các dịch vụ Cloud Function và Cloud Run tạo nội dung động nên nội dung cho một URL nhất định có thể thay đổi dựa trên những thứ như đầu vào của người dùng hoặc danh tính của người dùng. Để giải thích cho vấn đề này, các yêu cầu được xử lý bởi mã phụ trợ không lưu vào bộ nhớ cache trên CDN theo mặc định, ngoại trừ các yêu cầu trả về lỗi 404. Để xóa kết quả 404 đã lưu trong bộ nhớ cache, hãy triển khai lại Dịch vụ lưu trữ Firebase; triển khai lại Chức năng đám mây và Cloud Run không tự động làm mất hiệu lực bộ đệm.
Tuy nhiên, bạn có thể định cấu hình hành vi bộ nhớ đệm cho nội dung động . Ví dụ: nếu một chức năng chỉ tạo nội dung mới theo định kỳ, bạn có thể tăng tốc ứng dụng của mình bằng cách lưu nội dung đã tạo vào bộ nhớ cache trong ít nhất một khoảng thời gian ngắn.
Bạn cũng có khả năng giảm chi phí thực thi chức năng vì nội dung được cung cấp từ CDN thay vì thông qua chức năng được kích hoạt. Đọc thêm về cách tối ưu hóa việc thực thi chức năng và dịch vụ trong tài liệu Chức năng đám mây và Chạy trên đám mây .
Tìm hiểu thêm về hành vi lưu vào bộ nhớ đệm trong tài liệu dành cho nhà phát triển web của Google .
Đặt kiểm soát bộ đệm
Công cụ chính mà bạn sử dụng để quản lý bộ đệm cho nội dung động là tiêu đề Cache-Control
. Bằng cách định cấu hình tiêu đề này, bạn có thể thông báo cho cả trình duyệt và CDN về thời gian nội dung của bạn có thể được lưu trong bộ nhớ cache. Trong chức năng của bạn, bạn đặt Cache-Control
như sau:
res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
Trong tiêu đề ví dụ này, các lệnh thực hiện ba việc:
public
— Đánh dấu bộ đệm làpublic
. Điều này có nghĩa là cả trình duyệt và máy chủ trung gian (có nghĩa là CDN cho Dịch vụ lưu trữ Firebase) đều có thể lưu nội dung vào bộ nhớ cache.max-age
— Cho trình duyệt và CDN biết họ có thể lưu nội dung vào bộ nhớ cache trong bao nhiêu giây. Khi thời gian đã đặt hết hạn, trình duyệt và CDN phải xác thực lại nội dung với máy chủ gốc. Trong tiêu đề ví dụ, chúng tôi cho phép trình duyệt và CDN lưu nội dung vào bộ nhớ cache trong năm phút (xems-maxage
bên dưới để biết các điều khiển cụ thể cho bộ nhớ đệm CDN).s-maxage
— Chỉ ghi đè chỉ thịmax-age
cho bộ nhớ đệm CDN; cho CDN biết nó có thể lưu trữ nội dung trong bao nhiêu giây. Khi thời gian đã đặt hết hạn, CDN phải xác thực lại nội dung với máy chủ gốc. Trong tiêu đề ví dụ, chúng tôi chỉ ghi đè cài đặt chomax-age
cho CDN và cho phép CDN lưu nội dung vào bộ nhớ cache trong mười phút.
Đối với max-age
và s-maxage
, hãy đặt giá trị của chúng thành khoảng thời gian dài nhất mà bạn cảm thấy thoải mái khi người dùng nhận nội dung cũ. Nếu một trang thay đổi vài giây một lần, hãy sử dụng giá trị thời gian nhỏ. Tuy nhiên, các loại nội dung khác có thể được lưu trữ an toàn trong nhiều giờ, nhiều ngày hoặc thậm chí nhiều tháng.
Bạn có thể tìm hiểu thêm về tiêu đề Cache-Control
trên Mạng nhà phát triển Mozilla và trong tài liệu dành cho nhà phát triển web của Google .
Khi nào nội dung được lưu trong bộ nhớ cache được phục vụ?
Trình duyệt và CDN lưu trữ nội dung của bạn dựa trên:
- tên máy chủ
- Con đường
- chuỗi truy vấn
- Nội dung của các tiêu đề yêu cầu được chỉ định trong tiêu đề
Vary
Thay đổi tiêu đề
Tiêu đề Vary
xác định tiêu đề yêu cầu nào sẽ được sử dụng để cung cấp phản hồi thích hợp (liệu nội dung được lưu trong bộ nhớ cache có hợp lệ hay không hoặc liệu nội dung có nên được xác thực lại với máy chủ gốc hay không).
Dịch vụ lưu trữ Firebase tự động đặt tiêu đề Vary
thích hợp cho phản hồi của bạn đối với các trường hợp phổ biến. Hầu hết thời gian, bạn không cần phải lo lắng về tiêu đề Vary
. Tuy nhiên, trong một số trường hợp sử dụng nâng cao, bạn có thể có các tiêu đề khác mà bạn cần tác động đến bộ đệm. Trong trường hợp đó, bạn có thể đặt tiêu đề Vary
cho phản hồi của mình. Ví dụ:
res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');
Trong trường hợp này, giá trị của tiêu đề Vary
là:
vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization
Với các cài đặt này, hai yêu cầu giống hệt nhau với các tiêu đề X-My-Custom-Header
khác nhau được lưu vào bộ đệm riêng. Lưu ý rằng Dịch vụ lưu trữ thêm Cookie
và Authorization
vào tiêu đề Vary
theo mặc định khi có yêu cầu đối với nội dung động. Điều này đảm bảo rằng bất kỳ tiêu đề ủy quyền phiên hoặc cookie nào bạn sử dụng đều được tạo thành một phần của khóa bộ nhớ cache, giúp ngăn ngừa rò rỉ nội dung do vô tình.
Cũng lưu ý:
Chỉ có thể lưu trữ các yêu cầu
GET
vàHEAD
. Các yêu cầu HTTPS sử dụng các phương pháp khác không bao giờ được lưu vào bộ nhớ đệm.Hãy cẩn thận khi thêm cài đặt vào tiêu đề
Vary
. Bạn càng thêm nhiều cài đặt, CDN càng ít có khả năng phân phối nội dung được lưu trong bộ nhớ cache. Cũng nên nhớ rằngVary
dựa trên tiêu đề yêu cầu , không phải tiêu đề phản hồi .
Sử dụng cookie
Khi sử dụng Dịch vụ lưu trữ Firebase cùng với Chức năng đám mây hoặc Chạy trên đám mây, cookie thường bị loại bỏ khỏi các yêu cầu gửi đến. Điều này là cần thiết để cho phép hành vi bộ đệm CDN hiệu quả. Chỉ cookie __session
có tên đặc biệt mới được phép chuyển qua quá trình thực thi ứng dụng của bạn.
Khi xuất hiện, cookie __session
sẽ tự động được tạo thành một phần của khóa bộ nhớ cache, nghĩa là hai người dùng có cookie khác nhau không thể nhận được phản hồi được lưu trong bộ nhớ cache của người kia. Chỉ sử dụng cookie __session
nếu ứng dụng của bạn phục vụ nội dung khác tùy thuộc vào sự cho phép của người dùng.