javascript - 如何使从书签加载的JS文件的缓存失效?

标签 javascript caching browser-cache bookmarklet

我有一个如下所示的书签:

javascript:(function(){var a=document.createElement("script");a.type="text/javascript";a.src="//example.com/script.min.js";a.charset="utf-8";document.body.appendChild(a)})();

我的 .htaccess 文件中有以下内容以允许缓存文件:

<IfModule mod_expires.c>
    # Enable expirations
    ExpiresActive On
    # Default directive
    ExpiresDefault "access plus 1 month"
    # My favicon
    ExpiresByType image/x-icon "access plus 1 year"
    # Images
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    # CSS
    ExpiresByType text/css "access 1 month"
    # Javascript
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>

问题是,有时我会对 script.js 进行更改,并且我希望使用书签的人们获取更新的文件以防止出现问题。

对于在我的网站上加载的文件,我通过对文件进行版本控制来解决此问题,但我不知道如何使用小书签来做到这一点。

最佳答案

显然,除非客户端检查服务器,否则客户端无法神奇地知道您已更新脚本。

因此,根据这一事实,您必须决定如何平衡检查服务器的成本与可接受的延迟量,并考虑到您希望为解决问题付出的努力。

恕我直言,最简单的解决方案是将缓存时间更改为一两天。

另外,查找“http etag”。如果做得正确,客户端每次都会检查服务器,但传输的数据量应该很小。

如果您不想为所有“.js”文件普遍更改 mod_expires 规则,那么世界上没有什么规定您必须使用“.js”作为所有脚本文件的扩展名。客户不在乎。

另一种解决方案是将“?dt=2014-07-31-01:00:32”等日期字符串附加到脚本文件中,但您可以制作日期字符串以强制每天重新下载一次,或者每隔几天,或每周一次,或每月一次,等等。

关于javascript - 如何使从书签加载的JS文件的缓存失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25070526/

相关文章:

javascript - 从 HTML 网站查询或搜索 CSV 的最佳方式

caching - GORM(纹理)-缓存Blob图片或其他内容

javascript - 强制 Firefox 在后退按钮上重新加载页面

http - 浏览器图片缓存困惑

java - 我的网络应用程序如何在加载时清除浏览器缓存?

javascript - 使用 onclick attr 进行表行重定向

javascript - 在 Javascript 中提醒用户更新已成功

php - 多个输入字段上的 Jquery 日期选择器

c# - 浏览器是否缓存动态图像?

javascript - 强制刷新对 Head JS 不起作用