如何使从bookmarklet加载的JS文件的缓存失效

How to invalidate cache for JS file loaded from bookmarklet?

本文关键字:JS 文件 缓存 失效 加载 何使 bookmarklet      更新时间:2023-09-26

我有一个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进行了更改,我希望使用bookmarklet的人获得更新的文件,以防止出现问题。

对于在我的网站上加载的文件,我通过对文件进行版本控制来解决这个问题,但我不知道如何使用bookmarklet来解决这个问题。

显然,客户端没有办法神奇地知道您已经更新了脚本,除非它检查服务器。

因此,有了这个事实,您只需决定如何平衡检查服务器的成本与可接受的延迟量,并将其与您希望用于解决问题的努力量一并考虑。

我认为最简单的解决方案是简单地将缓存时间更改为一两天。

另外,查找"http etag"。如果做得好,客户端每次都会检查服务器,但是传输的数据量应该是微不足道的。

如果你不想为所有"。js"文件改变你的mod_expires规则,世界上没有任何东西说你必须使用"。js"作为所有脚本文件的扩展名。客户不关心。

另一个解决方案是附加一个日期字符串,如"?"Dt =2014-07-31-01:00:32"到脚本文件,但您可以制作日期字符串来强制每天、每隔几天、每周、每月或其他任何时间重新下载一次。