渲染引用静态文件(.js,.css)的html文件时 - 如何处理缓存清除?你每次更改文件时手动更改blabla.css?v = VERSIONNUMBER?你有基于文件的mtime的自动机制吗?
答案 0 :(得分:7)
我将高速缓存保留到HTTP协议,因为它是为此而设计的。只需在每个响应中提供ETag
响应标头,并通过检查If-none-match
请求标头添加对条件请求的支持。
计算实体标签的好方法取决于您存储文件的方式。在典型的* nix文件系统上,inode值是一个好的开始。
示例:
fs.stat(filePath, function(err, stats) {
if (err || !stats.isFile()) {
//oops
}
else {
var etag = '"' + stats.ino + '-' + stats.size + '-' + Date.parse(stats.mtime) + '"';
//if etag in header['if-non-match'] => 304
//else serve file with etag
}
});
在特殊情况下,您甚至可能希望将etag甚至文件缓存到内存中并注册fs.watchFile()
回调,以便在文件更改后立即使条目无效。