Кэширование php-страниц в кэше приложений HTML5

Я разрабатываю автономное приложение, которое также имеет набор страниц .php. В настоящее время я поместил эти файлы php в файлы манифеста .appcache, и он отлично работает. Но проблема в том, что даже если я в сети, когда я пытаюсь получить доступ к странице php, она загружает кешированную версию. Что я предпочитаю, так это функциональность, подобную этой,

  • Если онлайн - подключитесь к серверу и загрузите актуальную информацию, а кешированную перезапишите новой информацией.
  • Если офлайн - показать последнюю обновленную статическую html-страницу.

Вот содержимое моего файла манифеста .appcache

CACHE MANIFEST
#2
taskmanager.php
public/css/bootstrap.css.map
public/css/bootstrap.min.css
public/css/bootstrap-theme.css.map
public/css/bootstrap-theme.min.css
public/css/main.css
public/css/task-manager.css
public/js/app.js
public/js/taskmanager.js
public/js/offlink.js
public/js/jquery-2.1.4.js
public/js/bootstrap.min.js

NETWORK:
*
http://*

Что делает taskmanager.php, так это считывает задачи из базы данных и показывает их. Когда я кэширую его, как указано выше, он всегда будет отображать список задач при первой загрузке. Даже когда я в сети, он не вызывает базу данных и не получает новые записи. Вместо этого он загружается из кеша. Итак, мое решение состояло в том, чтобы поместить его в раздел FALLBACK, как указано в первом ответе. Даже если я помещу файл taskmanager.php в раздел FALLBACK, как показано ниже,

FALLBACK
taskmanager.php static_taskmanager.php

Теперь, если у меня есть подключение к Интернету, запустится taskmanager.php и покажет мне последние задачи. Но я хочу сделать static_taskmanager таким образом, чтобы он синхронизировался с этим последним набором задач. Это означает, что когда пользователь выходит из сети, static_taskmanager.php покажет самый последний список задач, который был возвращен taskmanager.php, когда пользователь был в сети). Но на данный момент он работает как полноценная статическая страница.

  1. Можно ли сделать это?
  2. Как я могу решить эту проблему?

ИЗМЕНИТЬ

Как я понял, выполняя поиск в SO и Google, одним из способов достижения этого является загрузка динамического контента с использованием AJAX. Но мне интересно, можно ли это сделать, используя только сам файл манифеста.


person Aruna Tebel    schedule 23.07.2015    source источник


Ответы (1)


Как насчет использования FALLBACK?

ОТСТУПАТЬ

Раздел FALLBACK сообщает браузеру, что делать, когда пользователь пытается получить доступ к некешированному ресурсу в автономном режиме. Из-за этого он выглядит немного иначе, чем CACHE и NETWORK. Он содержит два значения в строке, разделенные пробелом. Первое значение — это URI запроса для сопоставления, а второе — ресурс, отправленный при сопоставлении. Он кэширует ресурс справа для автономного использования, поэтому это должен быть явный путь. (http://html5doctor.com/go-offline-with-application-cache/< /а>)

FALLBACK:
/main.php /static.php

С этой конфигурацией запросы /main.php будут обслуживаться, если пользователь не находится в автономном режиме, и в этом случае пользователь увидит последнюю кэшированную версию /static.php.

Помните, что обновление ресурсов на вашем сервере не приведет к обновлению кеша. Вы должны изменить файл манифеста. В этом случае вы можете захотеть, чтобы манифест обновлялся комментарием версии или временной метки при создании новой версии static.php.

# Generated: 2015-07-23 10:34a

Более поздние заметки

В этом случае я бы порекомендовал удалить main.php из кеша или использовать статический запасной вариант, который позволяет пользователю знать, что он просматривает более старый контент. Причина в том, что даже если static.php будет обновлен, если пользователь не в сети и не получит это обновление, он все равно увидит старый контент.

Если вы видите проблемы с производительностью и хотите снизить нагрузку на сервер, вы можете создать статическую версию main.php с помощью wget, например:

wget http://example.com/main.php -O main.html

Это сохранит содержимое страницы в виде HTML. Запустите как задание cron, оно может обновляться каждые пять минут или около того.

Альтернативой является обновление static.php и appcache каждый раз, что, вероятно, приведет к перезагрузке всех ресурсов, тем самым нарушая цель кеша.

person user2182349    schedule 23.07.2015
comment
Спасибо за ответ. Да, откат решит всю часть моего решения. Я также хотел бы синхронизировать static.php с main.php. Это означает, что всякий раз, когда содержимое main.php изменяется, я хочу, чтобы он перезаписывал кешированный static.php (чтобы всегда static.php отображал самую последнюю возможную информацию). Возможно ли это сделать на стороне клиента? - person Aruna Tebel; 23.07.2015
comment
Обновление метки времени каждый раз при изменении main.php должно привести к тому, что браузеры будут запрашивать новую версию манифеста и static.php. - person user2182349; 23.07.2015
comment
На самом деле под «изменениями» я подразумеваю в основном изменения в базе данных. Скажем, например: main.php выводит имена животных из базы данных. Итак, когда он загружается в первый раз, он будет читать имена животных, а html-страница будет кэшироваться в кэше приложения. После этого каждый раз, когда я перезагружаю страницу (даже когда я в сети), она будет показывать один и тот же набор имен, даже несмотря на изменение базы данных. Что я хочу, так это отслеживать эти изменения базы данных, чтобы кэшированная версия была обновлена ​​​​путем синхронизации этих изменений в любом случае. Я надеюсь, вы поняли суть? - person Aruna Tebel; 23.07.2015
comment
Вы должны опубликовать свой файл appcache.manifest, чтобы людям было проще вам помочь. - person user2182349; 23.07.2015