使用外部js文件时,浏览器可能会被强制重新加载文件。参见here。
[最近,我发现,至少在Chrome版本80.0.3987.132中也缓存了INLINE脚本,摘要的示例:
<html>
<head>
<script>alert("I am cached!");</script>
</head>
<body>
<script>alert("Me too!");</script>
</body>
</html>
刷新内联脚本的方式是什么?
更新1:我必须提到返回内容的Web服务器正在使用HTTP 2.0
更新2:一种有效的解决方案将以辅助脚本为基础,并在页面加载时通过ajax或websocket获得“真实”脚本内容,然后像这样将其附加到头部:
function addScript(content){
let s = document.createElement('script');
s.innerHTML = content;
document.head.appendChild(s);
}
这可以完成工作,但不是最佳选择,因为它需要的请求超出了必要。
[我认为浏览器仅在打开该会话中的后续调用页面时才缓存嵌入式javascript,并且在关闭或刷新页面后不保留它。
但是,这意味着浏览器会从您的情况中从其缓存中获取HTML(包括JS)。因此,您可以尝试与页面一起发送一些标头,以强制浏览器不要使用其缓存的HTML副本,而使用新的html + js。
为了测试它是HTML缓存还是“内联JS”缓存问题,请使您的html动态更改,并确认刷新后它正在更改,但内联JS执行不会更改。
您可以在此处找到有关js缓存的更多详细信息:https://v8.dev/blog/code-caching-for-devs