Вопрос

Я создаю приложение для iPhone с jqtouch, и я использую cachemanifest, чтобы кэшировать все статические файлы (изображения, CSS, JavaScript), чтобы загрузить его быстрее. Однако на странице используется PHP для динамического контента, и я не хочу кэшировать это. Поэтому я генерирую CACHEMANIFEST с этим PHP-скриптом (Mainest.php):

<?php
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";

$hashes = "";
$lastFileWasDynamic = FALSE;

$dir = new RecursiveDirectoryIterator(".");
foreach(new RecursiveIteratorIterator($dir) as $file) {
  if ($file->IsFile() && $file != "./manifest.php" &&
    substr($file->getFilename(), 0, 1) != ".") {
    if(preg_match('/.php$/', $file)) {
      if(!$lastFileWasDynamic) {
        echo "\n\nNETWORK:\n";
      }
      $lastFileWasDynamic = TRUE;
    } else {
      if($lastFileWasDynamic) {
        echo "\n\nCACHE:\n";
        $lastFileWasDynamic = FALSE;
      }
    }
    echo $file . "\n";
    $hashes .= md5_file($file);
  }
}

echo "\nNETWORK:\nhttp://chart.apis.google.com/\n\n# Hash: " . md5($hashes) . "\n";
?>

На самом деле это работает действительно хорошо, кроме одной раздражающей вещи:

От того, что я прочитал где-то файл, который называет CACHEMANIFEST, автоматически включается в манифест и является кэшированием в городе. Вича означает, что моя начальная страница index.php, где я называю Cachmanifest - это кеширование. Это приводит к очень раздражающим проблемам.

Есть ли способ разобраться с этим или любым умным обстоянием? Страница находится в CACHEMANIFEST, перечисленном в виде сети, но похоже, что это входит в пчел, изменившись тем, что Cachmanifest вызывается из файла.

Это было полезно?

Решение

Идея Футты - это верно, но то, что вы, вероятно, найдете, является то, что только один раздел вашей фронтской страницы часто меняется. Оставьте это пусто, то пусть остальная часть страницы будет кэширована и не беспокойтесь об этом. Когда вы посещаете страницу, кэшированная версия мгновенно вызывается, и вы можете запустить скрипт, чтобы захватить фрагмент динамической страницы с сервера и установить его на InnerHTML для завершения страницы. Эффект заключается в том, что есть еще один HTTP-запрос (плюс один для манифеста), поэтому он не медленнее, и он добавляется, что вы можете показать часть вашего приложения, пока загружается динамический раздел. Если вы когда-либо хотите обновить всю страницу, прокомментируйте комментарий в манифесте, разметкой версии, и увеличивайте это для перезагрузки всего приложения.

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

Другие советы

У меня такой же опыт, но имейте следующий возможный обходной путь в моем Todo-списке:

  • Создать манифест со всеми статическими активами
  • Включите ссылку на этот манифест только в одной HTML-странице (BuildCache.php)
  • Проверьте, поддерживается ли окно. Оборота.
    • Перенаправить один раз на сеанс к Cache.html для создания / проверки / обновления кэша
    • есть PublyCache.php отображать некоторую информацию о том, что делается (используя PrienteCache EventListeners)
    • иметь RUBLECACHE.PHP перенаправить обратно к нормальному индексу (где манифест не определен)

Я надеюсь (и кто-то утверждал, что это дело в комментарии в моем блоге) Чтобы все страницы в том же домене будут использовать статические активы в ApplicationCache, даже если манифест не ссылается во всех них.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top