繁体   English   中英

是否可以缓存包含动态JavaScript链接的HTML页面?

[英]Can an HTML page be cached which has a link to dynamic JavaScript?

我可以使浏览器缓存myPage.html和myStaticJS.js,但不缓存myDynamicJS.php吗? 我已经测试了以下内容,并且myDynamicJS.php绝对没有在FF浏览器上缓存(时间更改),但是查看我的Apache访问日志显示myPage.html和myStaticJS.js也没有缓存。

myPage.html

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>What time is it?</title>
        <script src="myDynamicJS.php"></script>
    </head>
    <body>
        <div>My static cached HTML</div>
        <div>The time is <span id="now"></span></div>
    </body>
    <script src="myStaticJS.js"></script>
</html>

myDynamicJS.php

<?php
    header( 'Content-type: text/javascript' );
    date_default_timezone_set('UTC');
    echo('var now="'.date("Y-m-d H:i:s").'";');
?>

myStaticJS.js

document.getElementById("now").innerHTML=now;

是的,您可以使其不被缓存。 通过php中的缓存控制标头:

header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Pragma: no-cache"); //HTTP 1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

或者通过向网址添加动态控制的参数,使脚本的网址有所不同(可能不是最好的主意,因为浏览器缓存将尝试缓存每个版本...但是当您无法将其设为php或控件标头时,它可能会很有用):

<script src="myNotCachableJS.js?s=<?php echo rand(1000,100000); ?>"></script>

Php从不缓存,因为它在服务器端运行。 缓存(或告诉浏览器进行缓存)的最佳方法是通过.htaccess (或http.conf如果可以访问):

<IfModule mod_expires.c>
    ExpiresActive on

    ExpiresByType text/html               "access plus 1 month"
    ExpiresByType application/javascript  "access plus 1 month"
</IfModule>

您可以将其更改为“访问权限加1年”或您喜欢的任何时间范围。

希望这可以帮助您入门。

您可以使用FilesMatch指令仅将高速缓存头添加到以所选扩展名结尾的文件中:

<FilesMatch "\.(html|js)$">
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
</FilesMatch>

从理论上讲,这应该排除动态JS,因为它将具有PHP扩展名,但还要包含其他两个文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM