2011-11-07 38 views
5

Thông số W3C cho Lưu trữ web (được gọi chung là lưu trữ cục bộ HTML5, mặc dù đây là từ khóa sai) cho phép tác nhân người dùng thực thi giới hạn kích thước, được khuyến nghị là 5MB. Theo nhiều nguồn khác nhau tôi đã tìm thấy trên mạng, rất nhiều trình duyệt hiện đại sử dụng giới hạn 5MB này, ngoại trừ IE cung cấp 10MB.Làm cách nào để đối phó với giới hạn kích thước cho Lưu trữ web?

Trước tiên, tôi muốn biết, giới hạn này có áp dụng cho tổng số kết hợp localStorage và sessionStorage hay riêng lẻ không?

Bây giờ, làm cách nào để chúng tôi thực sự đối phó với các giới hạn này? Có cách nào để tìm ra giới hạn cho một trình duyệt cụ thể không? Có trang web nào duy trì thống kê trên các trình duyệt khác nhau không? Có ngoại lệ khi trình duyệt vượt quá giới hạn không? Có cách nào dễ dàng để kiểm tra ngoại lệ này "lớp học" trong các trình duyệt khác nhau không?

+1

Bạn đã tìm thấy một câu trả lời tốt để điều này? –

+1

Không, không thực sự. Để làm cho vấn đề tồi tệ hơn, có một trình duyệt chính (tôi quên cái nào) hiển thị một hộp thoại nếu trang web cố gắng vượt quá giới hạn lưu trữ. Không có cách nào để nhà phát triển web tùy chỉnh thông báo này, vì vậy nó sẽ chỉ nói điều gì đó như "trang web này đang cố gắng vượt quá giới hạn bộ nhớ", đó là trải nghiệm người dùng rất xấu. Do đó, công ty của tôi đã quyết định không sử dụng bộ nhớ cục bộ cho trường hợp sử dụng của chúng tôi và chỉ sử dụng cơ chế lưu trong bộ nhớ cache của trình duyệt mặc định thay vì URL "trông giống như" tệp javascript nhưng thực sự chỉ chứa định nghĩa đối tượng được tạo động. – Kidburla

+0

Tôi đã viết một mô-đun mà sẽ chăm sóc nói chuyện với localStorage theo một cách để nó không bao giờ vượt quá mức tối đa cho phép, nếu nó vượt quá 4mb nó làm trống các mục cũ nhất cho đến khi nó xuống dưới 3mb. số lượng byte được sử dụng tại mỗi thời điểm được cập nhật mỗi lần hệ thống thêm hoặc xóa khỏi nó, nghĩa là bạn có thể nhận được số lượng byte hiện đang sử dụng với thời gian tìm kiếm big-o 1. –

Trả lời

2

AFAIK, không có phương pháp nào trong đối tượng localStorage để xác định kích thước của nó. Tuy nhiên, cố gắng ghi một lượng dữ liệu vượt quá giới hạn lưu trữ sẽ dẫn đến một ngoại lệ mà bạn có thể bắt được.

Hãy xem http://arty.name/localstorage.html

Về cơ bản, bạn có thể quấn chức năng viết trong một khối try...catch như thế này:

function write(value, name) { 
    try { 
     localStorage.field = value; 
     return true; 
    } catch (e) { 
     return false; 
    } 
} 
+1

Xin chào, vâng tôi đã xem ví dụ trên trang web đó, và kể từ khi đăng bài của tôi, tôi nhận thấy rằng nó bắt một ngoại lệ. Tuy nhiên tôi tự hỏi nếu có một cách để kiểm tra nếu ngoại lệ đó là đúng hình thức? Ví dụ, trong trình duyệt của tôi (Firefox) tên ngoại lệ là "NS_ERROR_DOM_QUOTA_REACHED" nhưng tôi nghĩ đó là đặc thù của Firefox. Tôi nghĩ có một số thư viện để giải quyết những thứ như thế này !! – Kidburla

+0

Ngoài ra, đối với trang web đó, không rõ liệu hạn ngạch có cho cả localStorage và sessionStorage hay chỉ một hay khác ... – Kidburla

Các vấn đề liên quan