Quản lý hành vi bộ nhớ cache

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ể.

Bất kỳ nội dung tĩnh yêu cầu được tự động lưu trữ trên CDN. Nếu bạn triển khai lại nội dung trang web của mình, Lưu trữ Firebase sẽ tự động xóa tất cả nội dung tĩnh được 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 Functions 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ư thông tin người dùng nhập hoặc danh tính của người dùng. Vào tài khoản cho điều này, yêu cầu mà được xử lý theo mã backend không bộ nhớ cache trên CDN theo mặc định.

Bạn có thể, tuy nhiên, cấu hình bộ nhớ đệm hành vi cho nội dung động. Ví dụ: nếu một hàm 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 vào bộ nhớ đệm nội dung đã tạo trong ít nhất một khoảng thời gian ngắn.

Bạn cũng có thể 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 một chức năng được kích hoạt. Đọc thêm về tối ưu hóa chức năng thực hiện và dịch vụ trong chức năng đám mâyđám mây Run tài liệu.

Tìm hiểu thêm về bộ nhớ đệm trong hành vi của Google tài liệu nhà phát triển web .

Đặt kiểm soát bộ nhớ cache

Công cụ chính mà bạn sử dụng để quản lý bộ nhớ cache cho nội dung động là Cache-Control tiêu đề. Bằng cách định cấu hình tiêu đề này, bạn có thể giao tiếp với cả trình duyệt và CDN trong 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 thiết lập Cache-Control như vậy:

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 - Marks cache như public . Điều này có nghĩa rằng cả hai trình duyệt máy chủ trung gian (nghĩa là CDN cho căn cứ hỏa lực Hosting) có thể bộ nhớ cache nội dung.

  • max-age - Nói với các trình duyệt và CDN bao nhiêu giây mà họ có thể bộ nhớ cache nội dung. Khi hết thời gian đã đặt, 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 để cache nội dung cho năm phút (see s-maxage dưới đây để kiểm soát cụ thể cho CDN bộ nhớ đệm).

  • s-maxage - Ghi đè các max-age chỉ thị cho chỉ CDN-bộ nhớ đệm; cho CDN biết nó có thể lưu nội dung vào bộ nhớ cache bao nhiêu giây. Khi hết thời gian đã đặt, 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 ta đang trọng các thiết lập cho max-age cho CDN chỉ và cho phép CDN để cache nội dung cho mười phút.

Đối với max-ages-maxage , thiết lập giá trị của chúng với lượng dài nhất của thời gian mà bạn cảm thấy thoải mái với những người dùng nhận được nội dung cũ. Nếu một trang thay đổi vài giây một lần, hãy sử dụng một giá trị thời gian nhỏ. Tuy nhiên, các loại nội dung khác có thể được lưu vào bộ nhớ cache một cách an toàn hàng giờ, hàng ngày hoặc thậm chí hàng tháng.

Bạn có thể tìm hiểu thêm về Cache-Control tiêu đề trên các nhà phát triển Mozilla Mạng và trong của Google tài liệu nhà phát triển web .

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 nội dung của bạn vào bộ nhớ cache dựa trên:

  • Tên máy chủ
  • Con đường
  • Chuỗi truy vấn
  • Nội dung của tiêu đề yêu cầu quy định tại các Vary tiêu đề

Tiêu đề thay đổi

Các Vary tiêu đề xác định yêu cầu tiêu đề nên được sử dụng để cung cấp một phản ứng thích hợp (xem nội dung cache là hợp lệ hoặc nếu nội dung cần được xác nhận lại với máy chủ gốc).

Căn cứ hỏa lực Hosting tự động thiết lập một thích hợp Vary tiêu đề trên trả lời của bạn cho các tình huống thông thường. Hầu hết thời gian, bạn không cần phải lo lắng về Vary tiêu đề. 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 ảnh hưởng đến bộ nhớ cache. Khi đó là trường hợp, bạn có thể thiết lập các Vary tiêu đề trên trả lời của bạn. Ví dụ:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

Trong trường hợp này, giá trị của Vary tiêu đề là:

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

Với các thiết lập này, hai yêu cầu khác giống hệt với nhau X-My-Custom-Header tiêu đề được lưu trữ riêng biệt. Lưu ý rằng Hosting thêm CookieAuthorization cho Vary tiêu đề theo mặc định khi yêu cầu được thực hiện cho nội dung động. Điều này đảm bảo rằng bất kỳ phiên hoặc tiêu đề ủy quyền 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, điều này ngăn chặn việc rò rỉ nội dung một cách ngẫu nhiên.

Cũng lưu ý:

  • Chỉ GETHEAD yêu cầu có thể được lưu trữ. 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 Vary tiêu đề. Bạn càng thêm nhiều cài đặt, thì khả năng CDN có thể phân phát nội dung được lưu trong bộ nhớ cache càng ít. Cũng nên nhớ rằng Vary được dựa trên yêu cầu tiêu đề, chứ không phải tiêu đề phản ứng.

Sử dụng cookie

Khi sử dụng Lưu trữ Firebase cùng với Chức năng đám mây hoặc Chạy đám mây, cookie thường bị loại bỏ khỏi các yêu cầu đến. Này là cần thiết để cho phép CDN hiệu quả hành vi bộ nhớ cache . Chỉ đặc biệt tên __session cookie được phép đi qua để thực hiện các ứng dụng của bạn.

Khi hiện tại, các __session cookie được tự động tạo ra một thành phần của khóa bộ nhớ cache, có nghĩa là nó không thể cho hai người dùng với cookie khác nhau để nhận được của nhau cache phản ứng. Chỉ sử dụng __session cookie nếu ứng dụng của bạn phục vụ nội dung khác nhau tùy thuộc vào phép người sử dụng.