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

听起来您需要一个异步 PHP 请求。本质上,这会触发另一个脚本与您当前的脚本一起运行。@John 有正确的想法,但 crontab 只是异步运行缓存过程的一种方式。他的解决方案的缺点是它将每 5 分钟运行一次,无论是否需要。

有许多库和其他一些零碎的东西可以帮助您设置异步 PHP 处理,但正如@John 所说,它有点涉及。

这里有一些资源可以帮助解决这个问题:

于 2013-02-22T23:20:37.107 回答
1

Smarty 模板引擎是一个简单而小型的工具,它具有许多内置的缓存功能,没有框架规则。http://www.smarty.net/

于 2013-02-22T23:29:49.237 回答
1

我会设置一个 crontab 以每 5 分钟处理一次页面,并始终为您的用户提供缓存页面。

如果您无法设置 crontab,则可以输出一个隐藏的 iframe,其中包含动态页面加载,因此页面加载速度很快,但另一个实例正在后台加载(不是一个非常简洁的解决方案,但可以工作)。

于 2013-02-22T23:15:16.057 回答