requirejs:缓存本地存储?

时间:2015-01-31 11:21:20

标签: javascript requirejs local-storage

你知道是否有一个框架可以添加requirejs加载的脚本的本地存储缓存?我一直在尝试让它自己工作,但后备路径功能本身就很难实现。

这就是我所拥有的,并且它不适用于那些使用相对模块引用的文件。

// Inspired by https://github.com/andrewwakeling/requirejs-basketjs/blob/master/basket-loader.js
(function (rjs) {
  rjs.load = function (context, moduleName, url) {
    var storage = window.localStorage;
    var hash = computeHash(moduleName);
    var key = 's' + hash;
    console.log(url);
    if (storage && storage[key] !== undefined) {
      complete(context, moduleName, storage[key]);
    }

    fetch(context, moduleName, url);
  }

  function complete(context, moduleName, data) {
    var hash = computeHash(moduleName);
    var node = document.getElementById('rjs-mod-' + hash);

    if (!node) {
      node = document.createElement('script');
      node.id = 'rjs-mod-' + hash;
      node.type = 'text/javascript';
      node.charset = 'utf-8';
      node.defer = true;
      node.text = data;
      document.head.appendChild(node);
    }

    window.setTimeout(function() {
      context.completeLoad(moduleName);
    }, 0);
  }

  function fetch(context, moduleName, url) {
    var hash = computeHash(moduleName);
    var tmp = complete;

    // alas, hackish...
    $.get(url).done(function (data) {
      window.localStorage['s' + hash] = data;
      tmp(context, moduleName, data);
    }).fail(function (err) {
      // fallback ...
      context.onError(err);
    });
  }

  function computeHash(moduleName) {
    var pos = moduleName.lastIndexOf('/');
    if (pos !== -1)
      moduleName = moduleName.substr(pos, 1);

    return moduleName.hashCode();
  }

} (requirejs));

所以我的问题不是关于修改我的代码的人,而是你们知道一个框架,它将requirejs封装在本地存储功能中!

1 个答案:

答案 0 :(得分:1)

我在Twitter上问James Burke,这是他的回复:

@parmaeldo并非我的头脑,但听说过它。覆盖requirejs.load来执行此操作。或者,如果网站有选项,请使用appcache

- James Burke(@jrburke)31 januari 2015