我已经在heroku上部署了我的 Node 应用程序,并且我在它前面有cloudflare作为CDN。现在我的问题是,如果我的 javascript 发生更改并且我清除了 cloudflare 中的缓存,这会自动清除浏览器缓存吗? 我的expressjs服务器文件中有以下设置
if ('production' == process.env.NODE_ENV) { //production
var oneYear = 31557600000;
app.use(express.static(__dirname + '/public', {maxAge: oneYear}));
} else { //development
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler());
}
如果 cloudflare 上的清除不会清除浏览器缓存,那么每次更改 javascript 或 css 文件时清除浏览器缓存的最佳策略是什么?
问候, 赤丹
最佳答案
这是我最好的方法:
- 每次服务器重新加载(或定期setTimeout)时,使用node的fs模块读取所有静态文件
- 读取每个文件并使用加密模块生成文件的 md5 哈希
- 将哈希值与上次存储的哈希值进行比较并存储新的哈希值(使用任何类型的永久存储,如 Mongo、MySQL,甚至其他磁盘文件(我使用文件方法,因为它不会扰乱应用程序逻辑,我的脚本将 md5 和保存在同一位置的同名文件中,仅添加“.md5cache.”前缀)
- 将哈希值作为查询字符串附加到网页模板部分的文件路径中。
如果哈希值没有改变,浏览器会看到相同的文件名并从缓存中加载它。如果名称中附加了不同的哈希值作为查询字符串,浏览器将向服务器查询新版本。
Cloudflare 有一个选项可以禁用忽略查询字符串的行为,因此只需禁用该选项即可。
我知道 eTags 解决方案,但我从未设法让它正常工作。我认为 Node 不能很好地与 eTags 配合使用,但我可能是错的。现在这不是我关心的问题,因为我发现我的方法设计得非常好,并且我在我所做的每个项目中都将它用作库。
关于node.js - 清除 cloudflare 上的缓存是否也会清除浏览器上的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27772824/