Cache: phương thức put()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Note: This feature is available in Web Workers.

Phương thức put() của giao diện Cache cho phép thêm các cặp khóa/giá trị vào đối tượng Cache hiện tại.

Thông thường, bạn chỉ muốn fetch() một hoặc nhiều yêu cầu, sau đó thêm kết quả trực tiếp vào bộ nhớ đệm. Trong những trường hợp như vậy, bạn nên dùng Cache.add()/Cache.addAll(), vì đây là các hàm viết tắt cho một hoặc nhiều thao tác này.

js
fetch(url).then((response) => {
  if (!response.ok) {
    throw new TypeError("Bad response status");
  }
  return cache.put(url, response);
});

Note: put() sẽ ghi đè bất kỳ cặp khóa/giá trị nào trước đó đã lưu trong bộ nhớ đệm mà khớp với yêu cầu.

Note: Cache.add/Cache.addAll không lưu đệm các phản hồi có giá trị Response.status không nằm trong khoảng 200, trong khi Cache.put cho phép bạn lưu bất kỳ cặp yêu cầu/phản hồi nào. Do đó, Cache.add/Cache.addAll không thể dùng để lưu các phản hồi opaque, trong khi Cache.put có thể.

Cú pháp

js
put(request, response)

Tham số

request

Đối tượng Request hoặc URL bạn muốn thêm vào bộ nhớ đệm.

response

Response bạn muốn ghép với yêu cầu.

Giá trị trả về

Một Promise phân giải thành undefined.

Ngoại lệ

TypeError

Được trả về nếu lược đồ URL không phải là http hoặc https.

Ví dụ

Ví dụ này lấy từ ví dụ simple-service-worker của MDN (xem simple-service-worker chạy trực tiếp). Ở đây chúng ta chờ một FetchEvent xảy ra. Chúng ta tạo một phản hồi tùy biến như sau:

  1. Kiểm tra xem có tìm thấy mục khớp với yêu cầu trong CacheStorage bằng CacheStorage.match() hay không. Nếu có, phục vụ mục đó.
  2. Nếu không, mở bộ nhớ đệm v1 bằng open(), đặt yêu cầu mạng mặc định vào bộ nhớ đệm bằng Cache.put() và trả về một bản sao của yêu cầu mạng mặc định bằng return response.clone(). Clone là cần thiết vì put() tiêu thụ phần thân phản hồi.
  3. Nếu việc này thất bại (ví dụ do mạng bị ngắt), trả về một phản hồi dự phòng.
js
let response;
const cachedResponse = caches
  .match(event.request)
  .then((r) => (r !== undefined ? r : fetch(event.request)))
  .then((r) => {
    response = r;
    caches.open("v1").then((cache) => cache.put(event.request, response));
    return response.clone();
  })
  .catch(() => caches.match("/gallery/myLittleVader.jpg"));

Thông số kỹ thuật

Specification
Service Workers Nightly
# cache-put

Khả năng tương thích với trình duyệt

Xem thêm