Contenido

Cachea cualquier cosa con Javascript

23 Sep

+ 5

Las aplicaciones actuales, que requieren tanto Javascript se ven muchas veces obligadas a usar sistemas de caché para evitar realizar peticiones repetidamente.

var cache = {};

function myFunction() {
 if (cache.myFunction) return cache.myFunction;

 ....

 cache.myFunction = resultado;
 return resultado;
}

Esto, podría pasar por un pequeño ejemplo para tener un simple sistema de caché como resultado de una función. Esto nos obliga modificar las funciones que deseamos que dispongan de esta funcionalidad.

Gunnar Steinn, publica un sistema realmente interesante para evitarnos tener que modificar las funciones de nuestros scripts.

function cacheMethod(context, fn) {
 var oldFunc = fn;
 var funcName = fn.toString();
 funcName = funcName.substr('function '.length);
 funcName = funcName.substr(0, funcName.indexOf('('));

 context[funcName] = function() {
 if (cacheMethod.cache[funcName] == null)
 cacheMethod.cache[funcName] = {};

 // Create a unique key of parameters
 var key = Array.prototype.join.call(arguments, "|");;
 if (cacheMethod.cache[funcName][key] == null)
 cacheMethod.cache[funcName][key] = oldFunc.apply(this, arguments);

 return cacheMethod.cache[funcName][key];
 };
}

El sistema, que únicamente genera automáticamente el mismo sistema que hemos visto antes, únicamente sobreescribe la función antigua con una nueva que comprueba que exista caché antes de enviar los datos.

Como usarlo

Para usarlo únicamente tendremos que informar el contexto en el que queremos guardar la caché y el nombre de la función/objeto que queremos hacer que cachee el resultado.

cacheMethod(contexto, function);

En este momento la function, ya estará sobrecargada con el sistema de caché.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.