Javascript 如何在节点js中缓存客户端的.js文件
我有一个节点服务器,它向客户端提供响应(.js文件)和其他详细信息。我希望它应该发送一次.js文件。在客户端,.js文件应该保存在缓存中。 所以,当任何一个请求到达服务器时,若该.js文件已经有可用的缓存,那个么它就不应该再次下载它。 为此,我面临着高CPU使用率Javascript 如何在节点js中缓存客户端的.js文件,javascript,node.js,caching,express,Javascript,Node.js,Caching,Express,我有一个节点服务器,它向客户端提供响应(.js文件)和其他详细信息。我希望它应该发送一次.js文件。在客户端,.js文件应该保存在缓存中。 所以,当任何一个请求到达服务器时,若该.js文件已经有可用的缓存,那个么它就不应该再次下载它。 为此,我面临着高CPU使用率 提前感谢。您可以使用express.static指向项目中的文件夹,使用express提供静态文件(html、css或js),如下所示: app.use(express.static(__dirname + '/public'));
提前感谢。您可以使用express.static指向项目中的文件夹,使用express提供静态文件(html、css或js),如下所示:
app.use(express.static(__dirname + '/public'));
有关更多信息,请参阅此链接:浏览器应该为您执行此缓存工作,但您似乎需要自己实现此功能。如果您仍然需要实现自己的缓存,请考虑以下几点:
- 您需要一个方法来保存缓存项
- 您需要一个缓存策略(例如何时取消缓存等)
store = new Persist.Store('My Application');
function loadCachedJs(sha, loadedCallback) {
var jsCode = store.get(sha);
if (jsCode) {
// the js is on cache!, you can load it without going to server
setTimeout(
function() {
eval(jsCode);
loadedCallback();
}
);
} else {
// the js is not on cache, you need to go to server
// but is only for this first time
$.get("/.../.../" + sha + ".js", function(res) {
// store the result on cache
storeJsOnCache(sha, res.data);
eval(res.data);
loadedCallback();
});
}
}
function storeJsOnCache(jsCode) {
store.set(sha, jsCode);
}
然后,在代码的特定部分,您会得到“加载特定sha的js文件”,您可以调用loadCachedJs:
...
loadCachedJs(sha, function() {
// JS loaded, do what you need to do with this js file
});
而且,在服务器端,您需要实现返回对应于SHA的JS的端点。如果您的浏览器没有缓存响应对象,则可能没有正确实现HTTP缓存头 这些人对HTTP缓存有一个非常深入的回答:
当然,谷歌上还有很多其他浏览器。浏览器不会自动缓存JS文件吗?不,在我的场景中,它不会缓存它。太棒了:)很高兴我能帮上忙!