node.js缓存清除技术

时间:2011-01-22 22:51:10

标签: caching node.js

渲染引用静态文件(.js,.css)的html文件时 - 如何处理缓存清除?你每次更改文件时手动更改blabla.css?v = VERSIONNUMBER?你有基于文件的mtime的自动机制吗?

1 个答案:

答案 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()回调,以便在文件更改后立即使条目无效。