缓存php生成的javascript页面

时间:2013-01-05 17:49:10

标签: php javascript caching

我有一个PHP生成的javascript页面,它正在从数据库创建一个数组,绝对是在谋杀我的页面加载时间。该页面有一个php扩展名,目前正在使用标题将其内容类型标记为application / javascript。

我在网上找到了一个可能的解决方案,但是加速我的页面加载时间似乎并不多。我现在的文件的标题代码是:

header("Cache-Control: must-revalidate");
$offset = 60 * 60 * 24 * 3;
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
header($ExpStr); 
header("Content-type: application/javascript");

我需要做些什么特别的事情来缓存文件,所以我没有不断尝试加载这些数据库调用?我正在使用IIS 7.5和PHP 5.3.13。

3 个答案:

答案 0 :(得分:1)

如果数据库查询很昂贵,最简单的方法是将整个生成的输出写入文件,只输出文件,而不是每次加载页面时查询数据库。您需要做的就是在数据库发生变化时删除/更新文件。

您还应该考虑查看内存缓存,并尽可能优化查询。

答案 1 :(得分:1)

我一直使用带有max-age指令的缓存控制。

header('Cache-Control: max-age=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');

但我同意之前的评论。 如果您的数据库调用确实非常昂贵,请考虑抵消这些调用的频率。例如,如果你想每天更新一次数据库缓存,我会做这样的事情。

  • 将数据库查询的结果写入文件,并根据生成日期对其进行命名。
  • 在执行这些调用的文件中,让它查看缓存文件的生成日期,如果它超过一天,则重新生成它。如果它更年轻,只需阅读/使用缓存。

你可以选择让IIS通过任务调度程序运行更新脚本,然后你的脚本使得js永远不会进行年龄检查,只需从缓存中读取。

答案 2 :(得分:1)

在我看来,你是在标签中硬编码数组。如果数组非常大,浏览器必须加载更多字节。

考虑将AJAX与JSON结合使用。使用例如jQuery从另一个脚本加载数据。例如。 api.php?REQ = getBigArray。并且jQuery“success”回调在加载数组时运行逻辑。这意味着将完成两个http请求,但它会立即加载您的页面。

Serverside:

<?php //api.php
switch($_GET['req']){
 case "getBigArray": 
    $arrayFromDatabase = array( /* Load from db ... */ );
    echo json_encode($arrayFromDatabase); 
 break;
}

客户端:

$(document).ready(function(){
    $.getJSON('api.php?req=getBigArray', function(data) {
        console.log(data); // Use data in some way.
    });
});

这也将逻辑与服务器端/前端解耦。

如果要在后端缓存结果,也可以查看memcache / apc。非常简单的API,但需要在服务器端安装额外的软件。