繁体   English   中英

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

[英]How to invalidate cache for JS file loaded from 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”,但是您可以制作日期字符串以强制每天一次或每两周一次重新下载天,或者每周一次,或者每月一次,等等。

暂无
暂无

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

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