Javascript拦截请求并在我的VPS上使用缓存副本

时间:2013-12-25 19:20:27

标签: javascript caching interceptor

我喜欢在我的浏览器中对原型进行原型化 - 使用Jquery /类似修改DOM,加载脚本,图像,css等,而无需接触文本编辑器或unix shell。

我可以在VPS上安装任何内容,只需从特定脚本下载我要求的网络上的任何文件的副本,因此下次我请求时,它将从我的VPS提供,而不是再次击中原点?显然浏览器已经缓存了大部分内容,但不同之处在于我希望其他机器上的其他用户在我的VPS上获得缓存副本 - 但这与设计无关 -

例如:

require("library-that-checks-for-a-copy-on-my-VPS");

//pulls it down from Flickr's servers
loadImageFromFlickr("flickr.com/kitty18.jpg");

//now there's a copy on my VPS, so it's pulled down from there instead
loadImageFromFlickr("flickr.com/kitty18.jpg"); 

我真的不熟悉缓存,选项似乎令人生畏,所以我特意寻找的东西不需要太多配置;我的要求看起来很简单 - 这只是为了开发所以它不需要可以优化。

1 个答案:

答案 0 :(得分:0)

非常简单,只需使用一个对象将请求结果存储在它的url中。这样当你拨打loadImageFromFlickr时,第一行是这样的......

var cache = {};
function loadImageFromFlickr(url) {
  if (cache[url]) return cache[url];
  /* fetch the content */
  return (cache[url] = functionToGetContent(url));
}

如果您希望副本在会话中保持不变(即,在服务器重新启动之间保持缓存),那么您应该查看将内容响应存储在根据URL键构造的cache文件夹中。然后你可以从文件中检索而不是在缓存对象中返回什么。

PS,更简洁return (cache[url] ||= functionToGetContent(url))