0

これが私が使用しているコードです:

<?php
    $interval = 5 * 60;
    $filename = "cache/".basename( rtrim( $_SERVER["REQUEST_URI"], '/' ) ).".cache";

    if ( file_exists( $filename ) && (time() - $interval) < filemtime( $filename ) ) {
        readfile( $filename );
        exit(); 
    }

    ob_start(); 


    include 'dynamicpage.php'; 
?>



<?php
    // More page generation code goes here

    $buff = ob_get_contents(); // Retrive the content from the buffer

    // Write the content of the buffer to the cache file
    $file = fopen( $filename, "w" );
    fwrite( $file, $buff );
    fclose( $file );

    ob_end_flush(); // Display the generated page.
?>

現在、キャッシュされたページが5分以上経過している場合、このスクリプトは古いキャッシュファイルを置き換える新しいキャッシュファイルを生成します。古いキャッシュを最初に表示し、新しいキャッシュページをバックグラウンドで生成する方法はありますか?私のホストは弱いソースなので、ページの読み込みが完了するまで永遠にかかります。

4

3 に答える 3

1

5分ごとにページを処理し、常にキャッシュされたページをユーザーに提供するようにcrontabを設定します。

crontabを設定できない場合は、動的ページが読み込まれる非表示のiframeを出力できるため、ページはすばやく読み込まれますが、別のインスタンスがバックグラウンドで読み込まれます(あまり適切なソリューションではありませんが、機能します)。

于 2013-02-22T23:15:16.057 に答える
1

非同期のPHPリクエストが必要なようです。基本的に、これが行うことは、現在のスクリプトと一緒に実行する別のスクリプトをトリガーすることです。@Johnは正しい考えを持っていますが、crontabはキャッシュプロセスを非同期で実行する1つの方法にすぎません。彼のソリューションの欠点は、必要かどうかに関係なく、5分ごとに実行されることです。

非同期PHP処理をセットアップするのに役立つライブラリやその他のビットやボブはたくさんありますが、@ Johnが言うように、少し複雑になります。

これを支援するためのいくつかのリソースを次に示します。

于 2013-02-22T23:20:37.107 に答える
1

Smartyテンプレートエンジンは、フレームワークのルールなしで多くのキャッシュ機能が組み込まれているシンプルで小さなツールです。http://www.smarty.net/

于 2013-02-22T23:29:49.237 に答える