Comments 8
Хорошо когда есть, что кэшировать.
Огромное спасибо. В близлежащем проекте понадобиться:)
Огромное спасибо. В близлежащем проекте понадобиться:)
А нельзя ли избавится от ограничения с callback последним аргументом при помощи декоратора + мемоизаций? Первое что в сонную голову приходит, можно подумать как в декораторе воспользоваться
Только чувствую я fn.cache не туда запихнул.
cache(fn)
function cacheDecorator(fn){
fn.cache = {};
return function(){
if(fn.cache[JSON.stringify(arguments)]){return fn.cache[JSON.stringify(arguments)]};
var _data = fn.apply(this, arguments);
fn.cache[JSON.stringify(arguments)] = _data;
return _data;
}
}
function test1(x){
for (var i=0; i<99999999; ++i){i*i};
return x*x-1
}
console.time("time");
test1 = cacheDecorator(test1);
console.log(test1(10));
console.log(test1(10));
console.log(test1(10));
console.log(test1(10));
console.log(test1(10));
console.log(test1(10));
console.timeEnd("time");
Только чувствую я fn.cache не туда запихнул.
Такое сработает только при синхронном вызове, что при обращении к серверу редкость, а чаще не допустима в современном Вебе. В место callback можно ввести deferred объект, но тут скорее вопрос привычки.
п.с. очень интересно за что ставят минусы, напишите хотя бы в комментариях.
п.с. очень интересно за что ставят минусы, напишите хотя бы в комментариях.
Потому что велосипед изобрели. ИМХО
Да, вы правы, не подумал о запросах, тогда надо заранее продумать код под использование кэша, с ходу подключить и пользоваться без внесения изменений не получится.
Я не могу придумать «use case» для кэширования результатов функции через return;
Такое реализовать не проблема, при том часть вы сами написали в комментарии выше.
Такое реализовать не проблема, при том часть вы сами написали в комментарии выше.
Я не о том. Для того что бы воспользоваться вашей библиотекой, необходимо заранее при написание кода обеспечить выполнение требования с callback, т.е просто взять обернуть любую функцию не получится. Просто я начал думать как можно обойти это, и не подумал об асинхронных вызовах. А о том где можно применять кэширование результата через return, например у коллекций в backbone есть метод, который хитрым способом делает выборку, и если данных много, и обращений к этому методу, можно было бы делать кэш на пару секунд, но согласен что ситуация высосана из пальца =)
Sign up to leave a comment.
cache-js. функция кэширования