1

私はjqtouchを使用してiphoneアプリを構築しており、cachemanifestを使用してすべての静的ファイル(画像、css、javascript)をキャッシュし、読み込みを高速化します。ただし、ページは動的コンテンツにphpを使用しているため、キャッシュしたくありません。だから私はこのphp-script(manifest.php)でcachemanifestを生成しています:

<?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";
?>

これは、1つの苛立たしいことを除いて、実際には非常にうまく機能します。

私がどこかで読んだものから、cachemanifestを呼び出すファイルは自動的にマニフェストに含まれ、キャッシュされています。Wichは、私がcachemanifestと呼んでいる私のスタートページindex.phpがキャッシュされていることを意味します。これは非常に苛立たしい問題につながります。

これまたはスマートな回避策に対処する方法はありますか?このページはネットワークとしてリストされているキャッシュマニフェストにありますが、ファイルからキャッシュマニフェストが呼び出されているため、これは無効になっているようです。

4

3 に答える 3

2

私は同じ経験をしていますが、todoリストに次の可能な回避策があります。

  • すべての静的アセットでマニフェストを作成する
  • そのマニフェストへの参照を1つのhtmlページ(buildCache.php)にのみ含める
  • window.applicationCacheがサポートされているかどうかを確認し、サポートされている場合は次のようにします。
    • セッションごとに1回、cache.htmlにリダイレクトして、キャッシュを作成/チェック/更新します
    • buildCache.phpに、実行されていることに関する情報を表示させます(applicationCache eventlistenersを使用)
    • buildCache.phpを通常のインデックス(マニフェストが定義されていない場合)にリダイレクトします

マニフェストがすべてのページで参照されていなくても、同じドメインのすべてのページがapplicationCacheの静的アセットを使用することを願っています(そして誰かが私のブログのコメントでこれが当てはまると主張しました)。

于 2010-04-13T10:19:55.820 に答える
2

futtaの考えは正しいですが、おそらく、フロントページの1つのセクションだけが頻繁に変更されることに気付くでしょう。それを空のままにして、ページの残りの部分をキャッシュして、心配しないでください。ページにアクセスすると、キャッシュされたバージョンが即座に呼び出され、スクリプトを実行してサーバーから動的ページフラグメントを取得し、innerHTMLで設定してページを完成させることができます。その結果、HTTPリクエストが1つ(マニフェスト用に1つ)残っているため、速度が低下することはなく、動的セクションのダウンロード中にアプリの一部を表示できます。ページ全体を更新したい場合は、マニフェストにバージョンをマークするコメントを付け、それをインクリメントしてアプリ全体をリロードします。

清潔できれい。結局のところ、オフラインで遊んだり、オフラインでアプリを使って便利なことをしたりできる唯一の方法であるため、JavaScriptを少し避けようとせずに、システムを使用することを目的としています。

于 2010-04-14T01:04:37.543 に答える
0

別の解決策は、index.phpを空白のロードページまたはある種のスプラッシュ画面として保持し、ユーザーを実際の動的phpページにリダイレクトすることです。マニフェストはindex.phpにあり、index.phpはreal-index.phpにリダイレクトするため、問題はそれほど厄介ではない可能性があります。

于 2011-04-21T17:07:56.793 に答える