Pull to refresh

Comments 8

Хорошо когда есть, что кэшировать.
Огромное спасибо. В близлежащем проекте понадобиться:)
А нельзя ли избавится от ограничения с callback последним аргументом при помощи декоратора + мемоизаций? Первое что в сонную голову приходит, можно подумать как в декораторе воспользоваться 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.

Articles