缓存php生成的javascript页面
Caching a php generated javascript page
我有一个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.
在我看来,你在标签中硬编码数组。如果数组非常大,浏览器必须加载更多字节。
考虑将AJAX与JSON结合使用。使用示例jQuery从另一个脚本加载数据。如api.php ?要求= getBigArray。和jQuery "success"回调运行逻辑时,数组被加载。这意味着将完成两个http请求,但它会一次加载您的页面。
服务端:
<?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,但是需要在服务器端安装额外的软件。
如果数据库查询的开销太大,最简单的方法是将整个生成的输出写入一个文件,然后只输出该文件,而不是在每次加载页面时查询数据库。你所要做的就是在数据库发生变化时删除/更新文件。
您还应该考虑查看内存缓存,并尽可能优化您的查询。
我一直在max-age
指令中使用cache-control。
header('Cache-Control: max-age=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
,但我也同意前面的评论。如果您的db调用确实非常昂贵,请考虑抵消这些调用的频率。例如,如果你想每天更新一次数据库缓存,我会这样做。
- 将数据库查询的结果写入一个文件,并根据生成日期命名。
- 中执行这些调用的文件,让它查看缓存文件的生成日期,如果它超过一天,则重新生成它。
你可以选择你可以让IIS通过任务调度程序运行更新脚本,然后你的脚本使js永远不能做年龄检查,只是从缓存中读取。
- 我应该如何从xml文件构建一个javascript页面
- Javascript页面调用函数
- 当同一浏览器的两个实例浏览时,Javascript页面如何具有唯一的ID
- javascript页面加载发生在Button Click上
- 从Ajax脚本重定向Javascript页面
- 如何在不更改Javascript页面的情况下访问用户输入的电子邮件
- ajax html javascript页面刷新无闪烁问题
- 将按钮名称和值传递给另一个 JavaScript 页面
- javascript页面加载检查是否存在具有特定类的span(在<tr>下),如果不存在,则删除整个<
- 如何在PHP中包含动态Javascript页面的静态HTML结果
- Javascript 页面擦除过渡与超级滚动
- JavaScript 页面未正确重定向
- 简单的JavaScript页面按钮导航
- Javascript 页面过渡未定义
- Javascript 页面呈现为文本,而不是执行 document.location
- 我如何创建一个简单的javascript页面,允许用户输入文本并显示它
- JavaScript页面加载位置
- Javascript 页面重置
- 如何将图像 ID 传递给 JavaScript 页面
- 如何对内容名称由引用定义的 JavaScript 页面进行爬网