2013-02-14 18 views
6

Tôi đang xây dựng một ứng dụng web dành riêng cho iPad (chạy iOS 6+) hiển thị bộ sưu tập sản phẩm của một công ty.Kích thước bộ nhớ cache tối đa cho các ứng dụng web iOS6 là gì và làm cách nào để mở rộng nó?

Tất cả đều hoạt động hoàn hảo bằng cách sử dụng tệp "cache.manifest" của HTML5. Nhưng kể từ khi bộ nhớ cache đã phát triển đến khoảng 50MB, iPad không lưu dữ liệu ứng dụng nữa. Thay vì 50MB, kích thước bộ nhớ cache hiện là 0.1KB theo cài đặt Safari.

Vậy giới hạn bộ nhớ cache của Safari cho ứng dụng web là gì và có cách nào để phóng to số tiền tối đa cho bộ nhớ cache của ứng dụng không?

+0

Check-out này: http://stackoverflow.com/questions/2772908/max-size-ipad-iphone-offline-application-cache – mattdlockyer

Trả lời

12

chỉnh sửa tháng 2 năm 2014: Kích thước bộ nhớ cache tối đa trên iOS7.1 là 300Mb.

Một khách hàng đã hỏi tôi câu hỏi chính xác này gần đây, vì vậy tôi đã điều tra.

Theo iOS6 (tất cả các bài kiểm tra của tôi đã được thực hiện trên iOS6.1), đây là hai thứ khác nhau:

  • một trang web sử dụng một .manifest, truy cập với điện thoại di động Safari
  • một webapp trên màn hình chính, được tạo từ trang web

Trang web có .manifest có thể sử dụng tối đa 50mb bộ nhớ cache, với sự cho phép của người dùng được yêu cầu. Nó không thể sử dụng nhiều hơn. Giá trị này có thể được tìm thấy và xóa trong cài đặt/safari/nâng cao. Nếu bạn cố gắng thêm vào bộ nhớ cache, sự kiện error sẽ bị kích hoạt và window.applicationCache.status sẽ chuyển thành IDLE.

Ứng dụng web không chia sẻ cùng một bộ nhớ cache so với trang web của nó. Việc xóa cài đặt bộ nhớ cache/safari/nâng cao sẽ không làm bất kỳ điều gì cho bạn về ứng dụng web trên màn hình chính. Nó sẽ chấp nhận hơn 50mb bộ nhớ đệm mà không có đầu vào của người dùng, nhưng tôi không biết chính xác bao nhiêu (tôi đã thử nghiệm với 60mb thành công, hoàn toàn có thể truy cập ngoại tuyến. * Edit: try with 83mb, success) Tôi không biết nơi này dữ liệu có thể được nhìn thấy trong cài đặt iOS. Tôi đoán hư không.

Thử nghiệm đây là một cơn đau trong *** cho đến khi tôi tìm thấy spec. Có một API hoạt động hoàn hảo trên iOS6.
Bạn nên kiểm tra window.applicationCache.status, mà cho bạn biết trạng thái ứng dụng là gì, và các sự kiện sau (cắt và dán từ mã của tôi, vì vậy với người nghe của họ):

window.applicationCache.addEventListener('checking', onChecking); 
window.applicationCache.addEventListener('noupdate', onNoupdate); 
window.applicationCache.addEventListener('downloading', onDownloading); 
window.applicationCache.addEventListener('progress', onProgress); 
window.applicationCache.addEventListener('cached', onCached); 
window.applicationCache.addEventListener('updateready', onUpdateready);  
window.applicationCache.addEventListener('obsolete', onObsolete); 
window.applicationCache.addEventListener('error', onError); 

Tất cả đang làm việc trên iOS 6.1, ngay cả những progress sự kiện với event.loadedevent.total

Một ứng dụng web bắt đầu bằng cách kiểm tra, sau đó kích hoạt noupdate nếu .manifest là giống nhau. Trạng thái là IDLE.

Nếu .manifest thay đổi, tình trạng là DOWNLOADING, các progress cháy sự kiện cho mỗi tập tin trong biểu hiện của bạn, sau đó tình trạng là UPDATEREADYupdateready cháy.

Nếu bạn ngoại tuyến, một vụ cháy và trạng thái error sẽ là IDLE.

Bạn có thể kiểm tra tình trạng online/offline với

var online = navigator.onLine ? 'online' : 'offline'; 

Nó hoạt động nhưng thông số kỹ thuật cho biết đó là không đáng tin cậy.

hơn Ba điều cần hoàn thành:

  • manifest của tôi được đặt tên cache.manifest và tuyên bố như thế này <html manifest="cache.manifest">
  • .htaccess của tôi đã AddType text/cache-manifest manifestExpiresByType text/cache-manifest "access plus 0 seconds"
  • ứng dụng của tôi có <meta name="apple-mobile-web-app-capable" content="yes">

Với API này, cách dễ dàng hơn để hiểu những gì đang xảy ra dưới mui xe. Hãy chắc chắn để làm thử nghiệm của riêng bạn mặc dù, tôi không chắc chắn 100% của kết quả này hoặc họ có thể có thể với một phiên bản iOS mới. Tôi sẽ kiểm tra thêm cho kích thước tối đa.

+0

Cảm ơn lời giải thích rõ ràng! Tôi sẽ thử nó sau ngày hôm nay hoặc ngày mai. – Jules

+0

Dường như ứng dụng web (khi ở màn hình chính) chỉ lưu vào bộ nhớ đệm vào lần thứ hai. Lần đầu tiên sự kiện lỗi được kích hoạt, lần thứ hai sự kiện được lưu trong bộ nhớ cache được kích hoạt thành công! Cảm ơn bạn đã giúp đỡ. – Jules

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