我有一个节点服务器,它将响应(.js文件)以及其他详细信息提供给客户端。我希望它应该发送一次.js文件。在客户端,.js文件应保存在缓存中。 因此,当有任何请求来到服务器时,如果已经有可用于该.js文件的缓存,则不应再次下载它。 为此,我面临着高CPU使用率。
提前致谢。
答案 0 :(得分:0)
您可以使用express.static提供静态文件(html,css或js),指向项目中的文件夹,如下所示:
app.use(express.static(__dirname + '/public'));
有关详细信息,请参阅此链接:http://blog.modulus.io/nodejs-and-express-static-content
答案 1 :(得分:0)
浏览器应该为您执行此缓存工作,但似乎您需要自己实现此功能。如果您仍需要实现自己的缓存,请考虑到这一点:
对于第一个问题,我建议使用浏览器端持久性,我不建议使用localStorage,cookie或类似的,因为它不是100%跨浏览器,相反,我建议使用像 persist.js https://github.com/jeremydurham/persist-js
这样的填充程序为解决第二个问题,我建议使用文件ID,这些ID可以在服务器端从内容计算(使用SHA摘要),这样可以在需要时更改JS文件(基于内容的身份,像GIT)
例如,你可以这样做
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的端点答案 2 :(得分:0)
如果您的浏览器没有缓存响应对象,则可能无法正确实现HTTP缓存标头。
这些人对HTTP缓存有一个非常深入的答案:http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/
当然,谷歌还有很多其他人。