我设置了一个 PHP 页面来生成从 MYSQL 查询生成的相当大的数据集。
使用此数据,它将根据系统中当前的用户数量创建一定数量的表头(以 html 格式)。
foreach($usersFromMYSQL as $row)
{
echo
"
<th>$someUserData
<th>Col Y
<th>Col Z
";
}
然后,它还会根据系统中发生的事件数量,用一定数量的行(在 html 中)填充表
foreach ($eventsFromMYSQL as $row)
{
echo
"
<tr>
";
foreach($usersfromMYSQL as $inner_row)
{
echo
"
<td>$someUserSpecificEventData1
<td>$someUserSpecificEventData2
<td>$someUserSpecificEventData3
";
}
}
此代码已大大简化,但格式与我的网站相同。
我的问题是,我在 Raspberry PI 上运行我的网站,并且由于数据库中的用户和事件数量,该页面的加载时间(预期)很慢。目前,每次您访问该页面时,都会再次请求所有这些数据,并且(至少据我所知)不涉及任何形式的缓存或内存。
数据可能每天都会发生变化,这意味着如果要缓存页面,我希望它只在当天的剩余时间内保持缓存,因为第二天可能会有不同的结果。
我的问题是,有什么解决方案可以防止每次访问页面时重新加载此数据,但确保每天至少重新加载一次?
最佳答案
我假设你使用MVC系统,那么它可能会像这样完成:
- 在您的 Controller 中,检查当天的查看页面是否存在。
- 如果没有,则获取所有查询并生成所有 HTML 数据,然后使用唯一的文件名(例如 2014_01_01.php)将其保存为 View 文件。之后,加载页面。
- 如果存在,则直接加载当天的查看页面。
请注意,一旦生成当前日期的页面,脚本不应再次生成页面。
编辑 1
如果您使用单个文件,
<?php
$file_name = date('d_m_Y').".php";
if(file_exists($file_name))
{
//load
$page_data = file_get_contents($file_name);
}
else
{
//generate page here
//
$page_data = "....... YOUR HTML PAGE DATA HERE ........ ";
//save it
file_put_contents(date('d_m_Y').".php");
}
//show page to user
echo $page_data;
?>
关于php - 记住 MYSQL 查询结果以便在 PHP 页面中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26902384/