我正在检索目录中的所有文件并缓存该值,这样我就不必一次又一次地检索
$memefiles = glob("usermemes/*.jpeg");
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
有没有办法缓存这个结果,这样我就不必一次又一次地执行这些函数了。
优化或缓存的方法有很多,最好的方法取决于您尝试缓存的内容、数量和所需的刷新频率。例如
- 将计算结果存储在会话、数据库或文件中,然后查找
- 提前进行计算,然后根据需要查找
- 存储页面(文件中的PHP输出)并将存储的版本交付给用户
- 使用像Varnish这样的缓存/HTTP加速器
在这种情况下,我认为前期计算会满足您的需求。只需将代码放入一个名为calculate.php的脚本中,即可将计算出的$total_pages
值保存到一个文件中:
<?
$memefiles = glob("usermemes/*.jpeg");
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
file_put_contents('totalpages.dat', $total_pages);
?>
现在设置一个cron作业,每1分钟、5分钟、每小时或您需要的时间运行calcaulate.php
。如果您在windows服务器上运行,则应使用等效的任务计划程序。设置cronjobs非常容易,但它在系统和GUI/commandline工具之间有所不同,如果您有现场服务器或使用专业的网络主机,则会有所不同。因此,在stackoverflow上搜索适合您特定情况的cron工作。
假设你有一个cron作业正在运行,将$total_pages
的值保存到一个文件中,那么你就可以通过在网页上检索你的值
$total_pages = file_get_contents('totalpages.dat');
这将通过保证提高需要传递$total_pages
值的所有页面的性能。与公认的答案相比,这种解决方案具有一些显著的优势:
- 该任务每次只运行一次,无论您的页面负载是1、10000还是1.000.000个用户
- 用户仍然可以接收几乎新鲜或几乎实时的数据。新鲜程度由cronjob频率决定
使用cookie。为了将数组存储在cookie中,您必须用json对其进行编码,然后再使用json_decode()对其进行解码。使用下方的代码
<?php
if(!isset($_COOKIE['calculation'])) {
$memefiles = glob("usermemes/*.jpeg");
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
setcookie('calculation', json_encode($memefiles), time() + (8640000000 * 30), "/"); // Set the cookie for unlimited time
}
else{
$memefiles = json_decode($_COOKIE['calculation'],true);
}
?>
希望这能帮助您