gpt4 book ai didi

javascript - 由于缓存,我的网页未加载更改

转载 作者:行者123 更新时间:2023-11-30 13:02:11 26 4
gpt4 key购买 nike

我尝试过使用现代网络浏览器的缓存功能,但效果太差了。让浏览器重新缓存数据的唯一方法是修改 list 文件。

当然,我可以在 list 文件中添加带有版本号的注释来强制浏览器,但所需的手动工作感觉就像一个丑陋的 hack。没有别的办法吗?

我试过使用:

var loadNewCache = function() {
window.addEventListener('load', function(e) {
window.applicationCache.addEventListener('updateready', function(e) {
var newUpdates = (window.applicationCache.status == window.applicationCache.UPDATEREADY);
if (newUpdates) {
window.applicationCache.swapCache();
window.location.reload();
}
}, false);
}, false);
};

但是事件永远不会被触发。

我在 Google AppEngine 上运行并在我的 app.yaml 中有这个

- url: /html_client/(.*\.appcache)
mime_type: text/cache-manifest
static_files: html_client/\1
upload: html_client/(.*\.appcache)

编辑

我让它与这个脚本一起工作,这个脚本作为部署的前置运行。它不是很漂亮,但它确实有效。

#!/usr/bin/python

def main():
"""
Takes the current git sha id and replaces version tag in manifest file with it.
"""
from subprocess import Popen, PIPE

input_file = open("manifest.appcache", 'r')
output_file = open("manifest.appcache.tmp", 'w')
try:
git_sha_id = Popen(["git rev-parse --short HEAD"], stdout=PIPE, shell=True).communicate()[0]
target_line = "# Version: "
for line in input_file:
if target_line not in line:
output_file.write(line)
else:
output_file.write(target_line + git_sha_id)
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
finally:
input_file.close()
output_file.close()
Popen(["mv -f manifest.appcache.tmp manifest.appcache"], stdout=PIPE, shell=True)

if __name__ == "__main__":
main()

最佳答案

您不需要做任何丑陋的事情和更改 list 文件。

您需要做的就是在加载静态文件的网址末尾添加应用程序的当前版本。此版本号随每次部署而变化,因此它将在每次新部署后缓存。

<link rel="stylesheet" href="/static/css/main.css?{{VERSION}}" type="text/css" />

在生产环境中运行时,{{VERSION}} 可能是 os.environ.get('CURRENT_VERSION_ID', '') 并且可能只是一个随机数在本地运行。

您可以使用 os.environ.get('SERVER_SOFTWARE','') 检查您是否在本地运行。这里有一个简单的例子来获取你稍后应该传递给你的基本模板的这个值:

import random
import os

if os.environ.get('SERVER_SOFTWARE','').startswith('Development'):
VERSION = random.random()
else:
VERSION = os.environ.get('CURRENT_VERSION_ID', '')

关于javascript - 由于缓存,我的网页未加载更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17023331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com