在Javascript中缓存Ajax响应的可能技术有哪些?

Eug*_*rin 16 javascript ajax caching cache-control browser-cache

我正在实现一个Javascript模块管理器,通过XHR对象加载javascript文件.这种方法的问题是资源缓存:

  • 首先,XHR依靠内置的浏览器缓存机制,但是它的行为取决于浏览器的实现.
  • 也有一个localStorage,有一个basket.js它使用localStorage缓存下载的脚本,问题是存储大小限制通常是5-10MB.此外,localStorage是许多脚本的共享位置,它们也使用它来存储数据.
  • 而且还有一个Cache的接口ServiceWorkerAPI,但它只能在可ServiceWorker运行,因此怀疑地适合我的需要.

有谁知道他在他的项目中使用的一些聪明的旧的或新的javascript缓存技术,或者听说过?

注意:请不要建议使用.ajax作为接口的jQuery XHR,或者实现内置Javascript功能接口的任何其他库.

编辑:有一些有价值的建议:

  • 使用名为localForage的库.该库代表了IndexedDB,WebSQL和localStorage的统一API,其中一个依赖于浏览器.
  • 使用IndexedDB,它是真正强大的存储空间,没有明显的空间限制.唯一的问题是只有现代浏览器才能实现IndexedDB.

Som*_*luk 6

这是特定的JQUERY ....

你可以将ajax设置为缓存.

    $.ajaxSetup({ cache: true});
Run Code Online (Sandbox Code Playgroud)

如果对于特定的调用,您不想进行缓存响应,则调用

 $.ajax({
        url: ...,
        type: "GET",
        cache: false,           
        ...
    });
Run Code Online (Sandbox Code Playgroud)

如果您想要相反(特定调用的缓存),您可以在开头设置false,为特定调用设置true

如果要存储ajax响应的结果,可以使用本地存储.所有现代浏览器都为您提供存储api.您可以使用它们(localStorage或sessionStorage)来保存数据.

您所要做的就是在收到响应后将其存储到浏览器存储中.然后,下次找到相同的呼叫时,搜索是否已保存响应.如果是,请从那里返回答复; 如果没有打个电话.

Smartjax插件也做类似的事情; 但是由于您的要求只是保存调用响应,您可以在jQuery ajax成功函数中编写代码以保存响应.在拨打电话之前,请检查响应是否已保存.

  • jQuery`.ajax`只是本机XHR对象的接口,因此在我的情况下它无济于事 (3认同)