我的网站有很多JS和CSS文件。为了最小化来自浏览器的连接请求,我将它们加入到一个php文件中。我正在使用标头参数来强制文件被缓存。以下是我对JS案例的处理方式(CSS完全相同):
<?php
ob_start("ob_gzhandler");
$expires= 60 * 60 * 24 * 14;
header('Pragma: public');
header('Cache-Control: max-age=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
header('Content-type: text/javascript');
include('file1.js'); echo "\n\n\n";
include('file2.js'); echo "\n\n\n";
/* ... bla bla bla bla ... */
include('fileY.js'); echo "\n\n\n";
include('fileZ.js'); echo "\n\n\n";
ob_end_flush();
?>
这在Firefox中运行得很好。对于地球的其他部分,这些文件不是缓存!它们都很大,所以我有一个恼人的半秒白屏,以便其他浏览器一次又一次地为每个页面请求加载它们。
我认为这与标题的Content-Length有关。我尝试了2-3件事,但我无法使其发挥作用。有什么建议吗?
提前谢谢你。 任何帮助都是值得赞赏的。
答案 0 :(得分:0)
在项目的部署时间将所有这些.js加入单个文件并与其他任何文件一样提供服务,为您的网络服务器配置一个很长的到期时间是个好主意。
如果您没有部署脚本,那就是另一个故事。 将标题添加为“Last-Modified”或“ETag”是您最好的选择。
另外,我建议一次构建大文件,只在任何js发生变化时重建它。
答案 1 :(得分:0)
在所有浏览器中看起来该文件都在缓存。
加载延迟的原因是每个浏览器需要在DOM中解析文件的时间。 JS文件非常大。只是Firefox可以更快或更“智能”,这样用户就无法在加载页面时立即暂停。
这是错误的我的诅咒,文件没有缓存。
避免等待的解决方案......在关闭之前移动所有JS请求。