requirejs:缓存本地存储?
requirejs: cache with 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 封装在本地存储功能中的框架!
我在 Twitter 上问了 James Burke,这是他的回复:
@parmaeldo not off the top of my head, but have heard of it. Override requirejs.load to do it. Or, if an option for the site, use appcache
— James Burke (@jrburke) 31 januari 2015
你知道有没有一个框架可以添加由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 封装在本地存储功能中的框架!
我在 Twitter 上问了 James Burke,这是他的回复:
@parmaeldo not off the top of my head, but have heard of it. Override requirejs.load to do it. Or, if an option for the site, use appcache
— James Burke (@jrburke) 31 januari 2015