我有一个网站,可以打电话给api。我有5个apis来处理。目前我的PHP脚本进行一对一api调用,这使加载我的网站太慢(几乎超过1分钟)。为了解决这个问题,我必须缓存来自api调用的响应。我试过了
<?php
function getUrl () {
if (!isset($_SERVER['REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI'];
} else {
$url = $_SERVER['SCRIPT_NAME'];
$url .= (!empty($_SERVER['QUERY_STRING']))? '?' . $_SERVER[ 'QUERY_STRING' ] : '';
}
return $url;
}
//getUrl gets the queried page with query string
function cache ($buffer) { //page's content is $buffer
$url = getUrl();
$filename = md5($url) . '.cache';
$data = time() . '¦' . $buffer;
$filew = fopen("cache/" . $filename, 'w');
fwrite($filew, $data);
fclose($filew);
return $buffer;
}
function display () {
$url = getUrl();
$filename = md5($url) . '.cache';
if (!file_exists("/cache/" . $filename)) {
return false;
}
$filer = fopen("cache/" . $filename, 'r');
$data = fread($filer, filesize("cache/" . $filename));
fclose($filer);
$content = explode('¦', $data, 2);
if (count($content)!= 2 OR !is_numeric($content['0'])) {
return false;
}
if (time()-(100) > $content['0']) { // 100 is the cache time here!!!
return false;
}
echo $content['1'];
die();
}
// Display cache (if any)
display(); // if it is displayed, die function will end the program here.
// if no cache, callback cache
ob_start ('cache');
?>
我在堆栈溢出中从"Automatically create cache file with php"获得了这个脚本。实现这个脚本后,我的网站在30秒内加载速度很好,这很好。但是,我的网站有&p=a&q=b
等查询参数。这些参数是从上面脚本的缓存版本加载的,这些版本不会根据请求进行更新。上面的脚本缓存旧的缓存并实现该版本。它不会使用我的新参数进行更新,这些参数每次都会根据用户进行更改。用户需要传递日常变化的日期。缓存脚本加载了昨天的日期。我还没有制作缓存,我的静态文件就像js文件,css一样。
有什么建议吗?