【问题标题】:Force JavaScript reload just once a day每天只强制 JavaScript 重新加载一次
【发布时间】:2011-06-26 22:54:43
【问题描述】:

如果 JavaScript 的 ?random 是当前日期 - 那么它会每天只加载一次吗?

<script type="text/javascript" src="http://external.example.com/bookmarklet.js?random"></script>

我的问题的背景是我不希望它永远留在缓存中,但我也在寻找一种方法来节省一些带宽并加快速度。 谢谢

【问题讨论】:

  • 为什么不直接使用缓存过期标头?
  • @Pointy,可能是因为它不是 100% 跨浏览器的方式?或者他只是不能以这种方式调整服务器?

标签: javascript optimization browser-cache


【解决方案1】:

在包含的 js 文件名的末尾添加日期或时间戳确实会使其重新加载,如果它已被用户的浏览器缓存。

如果你想使用 JavaScript 来制作这个时间戳,你可以像这样动态地包含你的外部 js 文件:

var the_time = new Date(); var fileref=document.createElement('script'); fileref.setAttribute("type","text/javascript"); fileref.setAttribute("src", "test.js?" + the_time.getDate() + the_time.getMonth() + the_time.getFullYear()); document.getElementsByTagName("head")[0].appendChild(fileref);

我选择了从日、月、年制作时间戳,所以它每天都会改变。

【讨论】:

  • 谢谢你的例子。我试图将它实现到我的代码中。它是否正确? javascript:javascript:(function(){ var the_time = new Date(); new_script=document.createElement('SCRIPT'); new_script.type='text/javascript'; new_script.src='http://example.com/js/bookmarklet.js?x=' + the_time.getDate() + the_time.getMonth() + the_time.getFullYear()); document.getElementsByTagName('head')[0].appendChild(new_script); })(); 这是我第一次使用 Javascript 创建东西,我不确定 var the_time = new Date(); 在这种情况下是否有效。
  • 我会尝试将我的代码完全复制到您的“(function() {COPY CODE TO HERE})();”中代码。然后只需将“test.js”更改为调用外部 js 文件的任何内容。
  • 我试过了,但它不起作用。抱歉,我是 JS 和书签的新手。 (en.wikipedia.org/wiki/Bookmarklet) 欢迎任何帮助。
【解决方案2】:

如果你的页面是用 PHP 生成的,你可以这样做:

<script src="http://external.example.com/bookmarklet.js?<?php echo date('Ymd'); ?>"  type="text/javascript"></script>

【讨论】:

    【解决方案3】:

    仅当该时间戳被调整到一天中的某个时间(例如午夜)时。这不能在 HTML 中完成,但我发现了一些 PHP 可以完成这项工作:from PHP Freaks

    【讨论】:

      【解决方案4】:

      是的,这应该完全符合您的需要,只需注意您只写了日期部分,没有时间。

      【讨论】:

        【解决方案5】:

        甚至比每天一次更好,我认为您需要在 javascript 更改时刷新客户端的缓存 - 或者作为近似值,当您升级或重新启动应用程序时。不确定 PHP 的最佳实践是什么,但在 Python 中,我会在应用程序启动时生成一个随机数,将其存储在一个全局变量中,然后在您提供的资源的每个 URL 中使用它,无论是 JS 还是 CSS。 jQuery 或 YUI 等库仅在有新版本时才需要重新加载,您可能希望从 CDN 提供它们。

        【讨论】:

          猜你喜欢
          • 2014-03-30
          • 1970-01-01
          • 2011-12-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-02
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          相关资源
          最近更新 更多