node.jscaching清除技术

渲染引用静态文件(.js,.css)的html文件时 – 如何处理caching清除? 每次更改文件时是否都手动更改blabla.css?v = VERSIONNUMBER? 你有一些基于文件的mtime的自动机制?

我会留下caching到HTTP协议,因为它是为此而devise的。 只需在每个响应中提供一个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甚至是文件caching在内存中,并且注册一个fs.watchFile()callbackfs.watchFile() ,以便在文件更改后立即使条目无效。