【问题标题】:Caching of the JS file by browser which made on fly in php通过浏览器缓存 JS 文件,这是在 php 中进行的
【发布时间】:2014-02-15 08:47:08
【问题描述】:

经过 2 天的工作,我们成功地进行了缩小,并将多个 js 文件合并到一个文件中。

在我们的框架中,首先我们创建缩小文件,如果不存在的话。并且从 PHP/模板文件中,我们在 <script src=''></script> 标签中加载相同的文件。

但是每次我们请求同一个 js 文件时,每次它被浏览器下载(因为它显示 200 Ok 状态)但我们期望是 304(未修改),因为该文件之前被请求为好吧。

我们可以做些什么让文件被浏览器缓存?

编辑 1:

<?php
$content = NULL;
$jsFiles = array(..);//all files
foreach($jsFiles as $file) {
$content .= file_get_contents($file);
}

$minifiedContents = jsMinify($content);
file_put_contents($MinifiedJsFilePath, $minifiedContents);//minified.js

?>

<html>
<head>
<title>Minification</title>
<script src="minified.js"></script>
</head>
</html>

【问题讨论】:

    标签: javascript php caching browser-cache


    【解决方案1】:

    您的服务器需要支持If-Modified-Since request header(和/或其他条件获取标头)。这些标头由 Web 浏览器与每个 (conditional) get request 一起发送。

    有条件的 GET 方法请求仅传输实体 在条件头字段描述的情况下

    本质上,您的服务器需要:

    1. 检查请求标头中是否存在这些字段。
    2. 使用这些条件来确定是提供页面还是返回 HTTP 304 响应。

    在 google 中搜索会为您提供大量 PHP 示例。 Like this one.

    编辑:

    将服务器逻辑与客户端逻辑和标记分开。
    你可以这样做:

    服务器:

    创建一个 PHP 脚本(我们将其命名为 getjs.php),它返回缩小的 JS 内容,如果没有任何变化,则返回 304 响应:

    <?php
    
    if (/*Determine if need to return 304*/){
        header('HTTP/1.0 304 Not Modified');
        exit;
    }
    
    $content = NULL;
    $jsFiles = array();//all files
    foreach($jsFiles as $file) {
        $content .= file_get_contents($file);
    }
    
    $minifiedContents = jsMinify($content);
    
    header("content-type: application/javascript");
    echo $minifiedContents;
    
    ?>
    

    客户:

    &lt;script src="getjs.php"&gt;&lt;/script&gt;

    【讨论】:

      【解决方案2】:

      为什么不在 PHP 中手动设置状态码?

      <?
      // ...
      
      if ($file_not_modified) {
          http_response_code(304);
      } 
      
      //...
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        • 2012-04-09
        相关资源
        最近更新 更多