Giới hạn lưu trữ cho nhân viên dịch vụ là gì?


76

Hầu hết các trình duyệt đều cung cấp localStorage với giới hạn lưu trữ là 5MB cho mỗi miền. Có giới hạn / ràng buộc bộ nhớ như vậy đối với nhân viên dịch vụ không?

Tôi biết rằng nhân viên web (dựa trên nhân viên dịch vụ) không có những hạn chế như vậy. Nhưng Web worker không được sử dụng chính xác cho bộ nhớ đệm nội dung, thay vào đó chúng được sử dụng nhiều hơn để xử lý (vì vậy CPU là mối quan tâm chính ở đó).

Nếu không có giới hạn về dung lượng bộ nhớ, một trang web được thiết kế xấu có thể làm hỏng trình duyệt không?



Vì vậy, chúng tôi chỉ hy vọng rằng tất cả các trang web triển khai service worker không sử dụng quá nhiều bộ nhớ cache? Vấn đề này không xảy ra đối với nhân viên web vì họ không có ý định lưu trữ nội dung vào bộ nhớ đệm.
Nachiketha

1
Tôi sẽ nói rằng đó là giới hạn của hộp cát chỉ định số lượng bộ nhớ và tài nguyên CPU + IO có sẵn cho mỗi trang tại thời điểm đó. Và công nhân sẽ chia sẻ những tài nguyên đó trên hộp cát.
www.eugenehp.tk

1
Không gian lưu trữ khác nhau đối với các trình duyệt khác nhau nhưng rất có thể tuân theo một số quy tắc chung như trong đây: developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/…
magiccrafter

1
Tôi đã viết một bài blog về điều này một vài tuần trước. Tôi luôn được hỏi câu hỏi này FWIW. love2dev.com/blog/… Câu trả lời là nó khác nhau, nhưng ít nhiều phụ thuộc vào dung lượng trống của thiết bị. Không có gì trong đặc tả API Cache để kiểm soát hạn ngạch. Và bây giờ hầu hết các trình duyệt phân bổ theo nguồn gốc trên tất cả các API lưu trữ.
Chris Love,

Câu trả lời:


77

Cập nhật ngày 15 tháng 1 năm 2018

Các StorageManager giao diện của lưu trữ API đang trở thành một tiêu chuẩn cho tất cả các lưu trữ liên quan đến truy vấn api. Như đã đề cập bởi @ miguel-lattuada , API ước tính sẽ cung cấp ước tính dung lượng lưu trữ đã sử dụng ứng dụng web là dung lượng lưu trữ có sẵn. Ngoài ra, lưu ý ngoại lệ QuotaExceededError sẽ giúp chúng tôi xử lý các tình huống lỗi.

ví dụ mã:

if ('storage' in navigator && 'estimate' in navigator.storage) {
  navigator.storage.estimate().then(({usage, quota}) => {
    console.log(`Using ${usage} out of ${quota} bytes.`);
  }).catch(error => {
    console.error('Loading storage estimate failed:');
    console.log(error.stack);
  });
} else {
  console.error('navigator.storage.estimate API unavailable.');
}

Để biết thêm thông tin, hãy tham khảo 2 bài viết hay sau:


Ngày 16 tháng 3 năm 2017 (giữ nó chỉ để tham khảo / lịch sử)

Gần đây tôi đã xem qua bài viết này: offline-cookbook có ghi như sau:

Nguồn gốc của bạn được cung cấp một lượng không gian trống nhất định để làm những gì nó muốn. Đó là không gian trống được chia sẻ giữa tất cả các lưu trữ nguồn gốc : Lưu trữ Cục bộ, IndexedDB, hệ thống tập tin, và các Caches nhiên.

Số tiền bạn nhận được không phải là thông số cụ thể , nó sẽ khác nhau tùy thuộc vào thiết bị và điều kiện lưu trữ. Bạn có thể biết mình đã có bao nhiêu thông qua:

navigator.storageQuota.queryInfo("temporary").then(function(info) {
   console.log(info.quota);
   // Result: <quota in bytes>
   console.log(info.usage);
   // Result: <used data in bytes>
});

Mã trên có thể không hoạt động trong tất cả các trình duyệt . (ví dụ: trong chrome <48, người ta có thể phải tìm kiếm webkitPersistsStorage, v.v.)

Thông tin / tài nguyên hữu ích khác

  1. Theo bộ nhớ ngoại tuyến cho các ứng dụng web tiến bộ của Addy Osmani

    Trong Chrome and Opera: Bộ nhớ của bạn là theo nguồn gốc (thay vì theo API). Cả hai cơ chế lưu trữ sẽ lưu trữ dữ liệu cho đến khi đạt đến hạn ngạch của trình duyệt. Các ứng dụng có thể kiểm tra lượng hạn ngạch mà họ đang sử dụng bằng API quản lý hạn ngạch (như được mô tả ở trên).

    Firefox không có giới hạn, nhưng sẽ nhắc sau khi dữ liệu 50MB được lưu trữ

    Mobile Safari Tối đa 50MB

    Desktop Safari không giới hạn (lời nhắc sau 5MB)

    IE10+ tối đa 250MB và lời nhắc ở 10MB

  2. Hướng dẫn chi tiết hơn về Làm việc với hạn ngạch trên trình duyệt di động của Eiji Kitamura.

Hiện tại, đây là những bài báo / giải pháp phù hợp nhất được tìm thấy cho vấn đề của tôi. Nếu ai biết một số bài viết hoặc thông số kỹ thuật tốt hơn xin vui lòng chia sẻ.


2
Chia sẻ không gian lưu trữ giữa các API có thể chỉ đúng trong Chrome và Opera. Kiểm tra phần câu hỏi thường gặp trong bài đăng của Addy Osmani: medium.com/dev-channel/…
David Scales

1
@DavidScales cảm ơn bạn đã chỉ ra. Chỉ cần cập nhật câu trả lời với tài liệu tham khảo bài viết.
Nachiketha

1
NB storageQuota chỉ thực hiện cho V55 Chrome + và Opera 42+ (mà về cơ bản là Chrome anyway)
icc97

@ icc97 Đúng. API quản lý hạn ngạch vẫn ở trạng thái dự thảo. Cập nhật với liên kết. Cảm ơn
Nachiketha

8

Không có giới hạn rõ ràng. Tất cả các trình duyệt hiện đại đều có nhiều quy trình hoặc tương tự nhau, vì vậy một trang được thiết kế xấu (hoặc SW) sẽ không tệ hơn việc chính nó bị sập.

Lưu ý rằng thông số kỹ thuật SW rất rõ ràng về việc trình duyệt có thể giết và khởi động lại SW bất kỳ lúc nào, vì bất kỳ lý do gì. (Nếu DevTools được mở trên một trang, Chrome cố ý giết SW của trang đó liên tục để khuyến khích bạn áp dụng các phương pháp hay).


9
Tôi tin rằng @Nachiketha shu đang nói về không gian lưu trữ chứ không phải sử dụng bộ nhớ dễ bay hơi.
Marco Castelluccio

1

Mở trình duyệt latests bạn có thể sử dụng StorageManager mà là một thi hành một tiêu chuẩn mới cho việc lưu trữ trình duyệt, hãy xem này bài viết mozilla.

let _storageStats = await navigator.storage.estimate();
console.log(_storageStats);
/*
  Will prompt something like this
  {quota: 15946471833, usage: 682}
  Which is a representation of quota/usage in bytes
  As you can see I get an insane quota of almost 16 GB
*/



0

Tôi không chắc chắn 100%, nhưng tôi nghĩ bạn bị giới hạn hoàn toàn bởi những gì có sẵn trên máy khách. Như trong, không có giới hạn trên cố định

Nếu ai đó đang chạy một con quái vật của một cỗ máy và trình duyệt là ứng dụng hoạt động duy nhất, thì rất có thể bạn sẽ có nhiều dung lượng lưu trữ

Tuy nhiên, nếu nó là một chiếc máy giới hạn cũ hầu như không hoạt động; bạn có rất ít

Nó hoàn toàn phụ thuộc vào những gì bạn đang cố gắng thực sự. Bạn chỉ nên sử dụng nhân viên dịch vụ để lưu trữ những thứ quan trọng để trang / ứng dụng của bạn hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.