Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
Cómo almacenar en caché el resultado de la consulta en datos de brasas

Quiero almacenar en caché el resultado de una consulta en ember-data. ( findQuery )

Para que quede claro: no quiero almacenar en caché todos los modelos; qué modelos son el resultado de la consulta. ¿Cuál es el lugar adecuado para esto?

Estaba pensando en implementar esto en el adaptador y almacenar en caché el resultado de la llamada AJAX, pero no creo que esta sea una buena solución ya que no quiero anular los datos del modelo cargado y tal vez más nuevos y/o modificados.

¡No creo que sea posible devolver una lista de ID, y manipular el adaptador y el serializador para este caso de uso simple parece ser complicado!

En realidad, no quiero que se llame a findQuery para tipos específicos de consultas. Como el comportamiento de findAll . Agradable sería algo así como un gancho queryShouldBeCached .

¿Hay una buena solución para esto?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No soy un experto en Ember, pero creo que puede abordar su problema con una solución JS pura.

Las consultas dadas de Ember Data devuelven Promesas, por ejemplo, return this.store.findAll('blog-post'); // => Promise , podemos almacenar en caché las promesas en un objeto simple con funciones de orden superior (funciones que devuelven funciones). El caché de objetos podría reemplazarse con localStorage , sessionStorage , Map o incluso WeakMap , pero estoy usando el caché de objetos para que las cosas sean fáciles de entender.

Lo que quiere hacer esencialmente es reemplazar la siguiente llamada:

 return this.store.findAll('blog-post');

con algo más o menos como:

 return cachedStore.findAll('blog-post');

en realidad, con la solución a continuación, podría parecerse más a:

 return cachedStore.call(this, 'findAll', 'blog-post');

Como resultado, solicitará datos una vez y siempre regresará de la memoria caché en llamadas posteriores.

Déjame mostrarte cómo se vería la implementación:

 var cachedStore = (function () { // Your cache - in this case simple object literal var cache = {}; // Actual method that will check cache for results before trying to query services return function (method) { var args = Array.prototype.slice.call(arguments, 1); var serializedArgs = JSON.stringify(args); if (!(serializedArgs in cache)) { cache[serializedArgs] = this.store[method].apply(this, args); } return cache[serializedArgs]; }; }());

Y aquí hay un ejemplo de uso:

 // Fires a request cachedStore.call(this, 'findAll', 'blog-post'); // Returns from cache cachedStore.call(this, 'findAll', 'blog-post'); // Returns from cache cachedStore.call(this, 'findAll', 'blog-post'); // Fires a request cachedStore.call(this, 'findRecord', 'blog-post', 123); // Returns from cache cachedStore.call(this, 'findRecord', 'blog-post', 123); // Returns from cache cachedStore.call(this, 'findRecord', 'blog-post', 123);

¿Eso ayuda de alguna manera?

over 4 years ago · Santiago Trujillo Denunciar

0

Cuando activa una solicitud basada en parámetros, Ember Data no sabe cómo esos parámetros se traducen necesariamente en los modelos (es decir, no sabe que tiene todos los registros que tienen algún tipo de relación param1). Puede almacenarlo en caché usted mismo, pero aún necesitaría algún tipo de forma de distinguir esos registros de otros registros en su tienda.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda