Как очистить кэш приложения (функция HTML5) с помощью JavaScript?

#firefox #html #application-cache

#firefox #HTML #кэш приложения

Вопрос:

Наше веб-приложение использует кэш приложения (cache manifest) для восстановления HTML-страницы и ресурсов в автономном режиме. HTML-страницы имеют идентификаторы сеансов в качестве параметров в URI. Итак, после каждого выхода из системы и входа в систему новые HTML-страницы сохраняются в кэше приложения, поскольку идентификатор сеанса был изменен в URI. После нескольких недель работы с приложением некоторые браузеры начинают работать медленнее. А размер кэша приложений (протестирован на FF 3.6 ) составляет около 200 Мб! После каждого выхода из системы мы очищаем localStorage браузера, но как очистить ресурсы из хранилища приложения?

Комментарии:

1. Вы говорите «новые HTML-страницы сохраняются в кэше приложения» — это кажется неправильным? Браузер обрабатывает кэш приложения целиком, нет способа атомарно добавлять страницы в кэш приложения. Не могли бы вы пояснить, пожалуйста?

2. Я использую резервный раздел манифеста кэша таким образом: mysite.com/?SID=123456amp;a=1 mysite.com/?SID=123456 , таким образом, статические страницы загружаются и сохраняются в кэше. Каждый выход из системы генерирует новый идентификатор сеанса, который приводит к сохранению новых статических страниц.

3. Содержимое кэша приложения не должно меняться каждый сеанс, какой смысл сохранять его для автономного использования, если оно будет меняться? Поместите статический контент в кэш приложения, используйте локальное хранилище и AJAX для загрузки данных, специфичных для сеанса, чтобы вы могли контролировать их с помощью JavaScript.

4. Я понимаю вашу точку зрения, но я использую файл манифеста динамического кэша и для его получения добавляю идентификатор сеанса в URL файла манифеста в <html manifest =’?action=getmanifestamp;SessionID =1234567′> Без идентификатора сеанса невозможно получить ресурсы и корректный результат с сервера. Итак, как я понял, после каждой генерации нового сеанса размер кэша увеличивается из-за идентификатора сеанса в URI динамического файла манифеста.

5. Ах, вот в чем ваша проблема … вы каждый раз предоставляете пользователю другое веб-приложение.

Ответ №1:

Проблема с кэшем приложения, занимающим так много места, заключается в том, что вы каждый раз предоставляете агенту пользователя другое автономное веб-приложение. Автономное веб-приложение идентифицируется агенту пользователя по URI файла манифеста кэша, включая строку запроса, а не по URI основного файла, как вы могли подумать.

Таким образом, включая идентификатор сеанса в URI манифеста кэша, вы сообщаете браузеру, что каждый сеанс получает свое собственное совершенно новое приложение без использования какого-либо из ранее загруженных (и, следовательно, никогда не сможете их очистить). Вы каждый раз устанавливаете новое веб-приложение.

Пересмотрите архитектуру своего приложения, поскольку в настоящее время использование манифеста автономного кэша HTML5 не дает никакой ценности — просто вызывает чрезмерную загрузку. Архитектура, которую поддерживают веб-приложения, статически обслуживает весь HTML и извлекает данные, требующие сеансов, через AJAX. Веб-приложения не работают, если они построены в классической парадигме «динамически генерировать HTML-страницу с данными на сервере».

Комментарии:

1. Проблема устранена временным решением: клиент получает идентификатор сеанса через файлы cookie, а URI в файл манифеста t include sessionID-as a result the only one ApplicationCache object in browser with static name(without sessionId). @Stoive- sorry, can не добавляет репутации, потому что я здесь новый пользователь 🙂

Ответ №2:

Я не уверен, что у вас есть контроль над кэшем приложения из JavaScript. Это то, что должно быть обработано браузером и пользователем при очистке кэша.

Комментарии:

1. Основная проблема заключается в том, что пользователи, использующие наше веб-приложение, не имеют прав на очистку кэша из браузера стандартными методами браузера. Устройства (ОС, браузер) очень ограничены, и параметры браузера для них ограничены

2. Возможно, следующее расширение могло бы помочь? sites.google.com/site/keigoattic/home /…

3. Вы можете вручную запустить обновление с помощью JavaScript, но это все: whatwg.org/specs/web-apps/current-work/multipage /…