#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 /…