Solo hay dos cosas difíciles en Ciencias de la Computación: invalidación de caché, nombrar cosas y errores fuera de uno.
Su pregunta pertenece a la categoría de “invalidación de caché”. Le sugiero que se inspire en HTTP (o tal vez incluso use HTTP directamente); allí, cuando el servidor envía una pieza de contenido, enviará un encabezado de Last-Modified
con la fecha y hora UTC cuando se creó el contenido (o se actualizó) ) Cuando el cliente envía una solicitud (no importa debido al intervalo regular o simplemente a una nueva solicitud), incluirá un encabezado If-Modified-Since
, donde repetirá la fecha y hora que ha guardado de la solicitud original, si el servidor determina que el contenido no ha cambiado desde entonces, responderá con 304 Not Modified
con un cuerpo de respuesta vacío, de lo contrario solo 200 OK
y el cuerpo (nuevo para el cliente). De esta manera, aunque habrá una solicitud, solo habrá algunos encabezados si el contenido no ha cambiado realmente.
También hay alternativas que evitan las conexiones por completo, por ejemplo, el encabezado Expires
que le dice al navegador que ni siquiera se moleste antes de la hora mencionada, y solo use directamente lo que haya almacenado en caché.
- Cómo argumentar en la siguiente declaración 'híbrido es mejor que nativo porque escribir una vez se ejecuta en todas partes'
- ¿Qué es el instalador Cydia iOS 11.0.2?
- ¿Cuáles son las mejores aplicaciones de iOS basadas en voz?
- ¿Cuál es la mejor aplicación de seguimiento de finanzas de iOS?
- ¿Cuáles son ejemplos de aplicaciones que facilitan la instalación de su aplicación iOS a partir de una página web?
Otra alternativa interesante es usar nombres únicos para todos (las versiones de) recursos (por ejemplo, puede usar GUID), y decirle al cliente que guarde en caché para siempre: el archivo “índice” puede usar la primera técnica con las fechas de modificación, y si desea actualizar algunos de los recursos a los que se refiere (sin importar cuáles sean), simplemente genere un nuevo nombre; cuando el cliente no puede encontrar algún nombre en su caché, lo descargará. Si está implementando esto usted mismo, tenga cuidado de que el caché no crezca sin límites: puede mantener su tamaño constante pensando en alguna política de desalojo, de modo que cuando se agrega un nuevo elemento, sea menos probable que se use en El futuro se desperdicia. Por supuesto, no puede ver el futuro, por lo que tendrá que elaborar una política de compromiso que tenga sentido para su aplicación (por ejemplo, Menos utilizado recientemente, también conocido como LRU – Algoritmos de caché).
En su lugar, trataría de usar HTTP. No hay razón para escribir cosas que ya estén bien escritas por otra persona 🙂
PD: si se pregunta cuándo buscar actualizaciones, hay dos enfoques: push y sondeo. En las encuestas, verifica a intervalos regulares (por ejemplo, cuando se abre su aplicación, cuando el usuario hace clic en actualizar y cada 15 minutos). En push, tiene una manera para que su servidor envíe algo al cliente, para pedirle que se actualice (ya sea conexión TCP bidireccional, o en el mundo web, WebSockets, o alguna API de Apple push o algo así).