获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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

Mọi nội dung tĩnh được yêu cầu sẽ tự động được lưu vào bộ nhớ đệm 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 đã 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 ra nội dung động nên nội dung cho một URL nhất định có thể khác nhau 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. Để giải thích điều 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.

Tuy nhiên, bạn có thể định cấu hình hành vi lưu vào bộ nhớ đệm 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ề cách tối ưu hóa thực thi chức năng và dịch vụ trong tài liệu Cloud FunctionsCloud Run .

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ộ nhớ cache

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ể 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 đặ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ộ nhớ cache là public . Điều này có nghĩa là cả trình duyệt máy chủ trung gian (có nghĩa là CDN cho 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 bao nhiêu giây. 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 đang cho phép trình duyệt và CDN lưu nội dung vào bộ nhớ đệm trong năm phút (xem s-maxage bên dưới để biết các điều khiển cụ thể cho bộ nhớ đệm CDN).

  • s-maxage - Ghi đè chỉ thị max-age chỉ cho CDN-caching; 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 tôi đang ghi đè cài đặt cho max-age chỉ 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-ages-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 đượ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ề 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 vào bộ nhớ cache 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 tiêu đề yêu cầu được chỉ định trong tiêu đề Vary

Tiêu đề thay đổi

Tiêu đề Vary xác định tiêu đề yêu cầu nào nên được sử dụng để cung cấp phản hồi thích hợp (cho dù nội dung được lưu trong bộ nhớ cache có hợp lệ hay không hoặc nếu nội dung cần được xác thực lại với máy chủ gốc).

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 tình huống 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 để ảnh hưởng đến bộ nhớ cache. Khi đúng như vậy, bạn có thể đặt tiêu đề Vary trên 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ộ nhớ cache riêng. Lưu ý rằng Lưu trữ thêm CookieAuthorization 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ỳ phiên hoặc tiêu đề ủy quyền cookie nào mà 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 chặn việc rò rỉ nội dung một cách ngẫu nhiên.

Cũng lưu ý:

  • Chỉ các yêu cầu GETHEAD mới có thể được lưu vào bộ nhớ đệm. 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, 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 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 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. Điều này là cần thiết để cho phép hoạt động bộ nhớ cache 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 tự động được tạo thành một phần của khóa bộ nhớ cache, có nghĩa là hai người dùng có cookie khác nhau không thể nhận 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 cung cấp nội dung khác nhau tùy thuộc vào ủy quyền của người dùng.