【问题标题】:Using of JQuery Deferred Promises for Caching使用 JQuery Deferred Promise 进行缓存
【发布时间】:2015-10-03 03:22:48
【问题描述】:

在查看 JQuery Deferred Promises 的潜在用例时,我发现缓存是一种潜在用途。这带来了以下问题:在使用现代浏览器和智能客户端(Jquery、任何现代 MVC 等)时,我是否还要担心自己缓存任何内容?我正在使用 MEAN 堆栈,我的印象是默认情况下确实会发生缓存。标头中有一个 Etag 字段,可确保服务器不会两次发送相同的信息。第二次,客户端将获得 304 代码,响应体为空。那么是否有任何用例需要在前端手动实现缓存?谢谢!

【问题讨论】:

标签: jquery caching express promise jquery-deferred


【解决方案1】:

Promises 的整个概念旨在简化 JavaScript 程序员处理异步计算的过程。我可以想象一个有效的用例,当您提供一些带有拒绝承诺的预定义数据时,但这不是您所说的“缓存”。

如果您有一个延迟对象来处理对异步 API 的某种请求,那么您可以为静态数据实现一个缓存层,它可能是您的 .then() 函数的一部分。浏览器将向 API 发送与您的代码一样多的请求,并且服务器将以相同数量的响应进行响应,除非它有自己的缓存层。

Here is an example 使用 Memoization 缓存来自异步计算的数据。

// *specialized* function for, say, network requests,
// where caching is desired. In this case, we're caching
// promises by the URL they're fetching
var fetch = (function () {
  var cache = {};
  return function (url) {
    cache[url] = cache.hasOwnProperty(url) ? cache[url] : new Promise(
      /* request magic goes here */
    );
    return cache[url];
  };
});

TL:DR

您不使用 Promises 进行缓存,而是为异步计算实现自己的缓存层(您可以使用 Memoization 模式)。使用 Deferred 对象或常规回调都没有关系。

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2015-07-25
    相关资源
    最近更新 更多