我有一个PHP页面缓存脚本;如何在生成新页面之前使其显示以前缓存的页面?

时间:2013-02-22 23:10:25

标签: php caching

这是我正在使用的代码:

<?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分钟,则此脚本将生成新的缓存文件以替换旧缓存文件。有没有什么办法可以先让旧的缓存显示,并在后台生成新的缓存页面?我的主人是弱酱,所以等待页面完成加载需要永远。

3 个答案:

答案 0 :(得分:1)

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

如果你不能设置crontab,你可以输出一个隐藏的iframe,其中包含动态页面加载,因此页面加载很快,但另一个实例在后台加载(不是一个非常简洁的解决方案,但有效)。 / p>

答案 1 :(得分:1)

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

有许多库和其他位和bob可以帮助你设置异步PHP处理,但是@John再说一遍,它有点参与。

以下是一些可以帮助解决此问题的资源:

答案 2 :(得分:1)

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