update polymorphic ember data ember.js ember-data

ember.js - polymorphic - Ember-Data.find() vs.all(): ¿cómo controlar el caché?



relationship ember js (2)

Me dijeron que para no hacer una solicitud todo el tiempo, se puede usar el método .all () para cargar datos que se guardan en la tienda. Pero, ¿cómo trata Ember con el caché? Tengo un par de preguntas.

¿Cómo controlas el caché? ¿Cuándo usas .find () y cuándo .all (). ¿Usas .find () y luego .all ()? ¿Por cuanto tiempo?

¿Tiene .all () alguna fecha de vencimiento para que después de algún tiempo pueda realizar una nueva solicitud? ¿O usa Local Storage para que tenga que borrarlo manualmente?

Supongamos que tengo algunos datos que me gustaría actualizar solo una vez a la semana. ¿Cómo debo hacer esto? Ahora, cada vez que entro o vuelvo a visitar la misma ruta, se realiza una nueva solicitud. ¿Cómo puedo evitar esto?


Entonces comenzaremos respondiendo la pregunta de tu comentario:

Prefiero saber cómo puedo cargar datos cuando se inicia una aplicación (no a través de rutas, ya que no tengo que actualizarla tan a menudo). Es posible

Por lo tanto, técnicamente, esto sigue siendo a través de rutas, pero la mejor manera de cargar datos cuando una aplicación se "inicia" es a través del modelo de la Ruta de la Aplicación.

App.ApplicationRoute = Ember.Route.extend({ model: function({ return App.Post.find(); }) })

El enrutador esperará a que la promesa devuelta por find () se resuelva, por lo que puede estar seguro de que la respuesta del servidor ha regresado antes de ingresar cualquier otra ruta.

¿Cómo controlas el caché?

Sobre todo no te preocupes por eso. Puede actualizar () un registro individual después de algún tiempo de espera si es necesario.

¿Cuándo usas .find () y cuándo .all (). ¿Usas .find () y luego .all ()? ¿Por cuanto tiempo?

Depende de lo que quieras lograr. En nuestra aplicación usamos find () en la ruta de la aplicación, luego todo () o un filtro () en otras rutas.

¿Tiene .all () alguna fecha de vencimiento para que después de algún tiempo pueda realizar una nueva solicitud?

No Nunca hará una nueva solicitud.

¿O usa Local Storage para que tenga que borrarlo manualmente?

No utiliza almacenamiento local, los registros están en la memoria. Así que seguro que un F5 borrará el caché.

Supongamos que tengo algunos datos que me gustaría actualizar solo una vez a la semana. ¿Cómo debo hacer esto? Ahora, cada vez que entro o vuelvo a visitar la misma ruta, se realiza una nueva solicitud. ¿Cómo puedo evitar esto?

Entonces, vamos a suponer que usa find () solo en la ruta de la aplicación, y ese usuario mantiene el navegador abierto durante 1 semana y los registros han caducado. Hay muchas maneras de actualizar, lo que es fácil / lo mejor depende de si todos expiran a la vez o si se agotan de uno en uno.

  • Haga que un temporizador verifique los registros caducados y llame a refresh () según sea necesario.
  • Tener un modelo de ping que actualice en algún horario. Cuando el servidor responde a una actualización, puede descargar de forma simultánea los registros modificados.
  • O simplemente puede actualizar el navegador una vez por semana (a través de window.location ...)

Lo que llamas caché es el contenido de la tienda. Por lo general, hay 2 formas de actualizar la tienda para reflejar los cambios realizados en el backend:

  • el cambio ocurre con una interacción / llamada del usuario al servidor. Si actualiza varios registros en el backend, puede descargarlos con la respuesta de esa solicitud.
  • el cambio ocurre de forma asíncrona en el lado de fondo (trabajo de fondo). Puede usar un websocket para enviar esos cambios al cliente.