Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

192
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!