这是我正在使用的代码:
<?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分钟,则此脚本将生成新的缓存文件以替换旧缓存文件。有没有什么办法可以先让旧的缓存显示,并在后台生成新的缓存页面?我的主人是弱酱,所以等待页面完成加载需要永远。
答案 0 :(得分:1)
我会设置一个crontab来每5分钟处理一次页面,并始终为用户提供缓存页面。
如果你不能设置crontab,你可以输出一个隐藏的iframe,其中包含动态页面加载,因此页面加载很快,但另一个实例在后台加载(不是一个非常简洁的解决方案,但有效)。 / p>
答案 1 :(得分:1)
听起来你需要一个异步的PHP请求。基本上它的作用是触发另一个脚本与当前脚本一起运行。 @John有正确的想法,但crontab只是异步运行缓存过程的一种方式。他的解决方案的缺点是它将每5分钟运行一次,无论是否需要。
有许多库和其他位和bob可以帮助你设置异步PHP处理,但是@John再说一遍,它有点参与。
以下是一些可以帮助解决此问题的资源:
答案 2 :(得分:1)
Smarty模板引擎是一个简单而小巧的工具,它具有许多内置缓存功能,没有框架规则。 http://www.smarty.net/