Pregunta

hoy una pregunta se ha planteado aquí y no tengo una evidente respuesta.

Suponga que se concatena y comprimir todos los archivos de recursos (CSS y Javascript) y declarar en el "Master Page".

En una aplicación de varias páginas, si un archivo CSS cambios que se recarga en el próximo pleno de carga de la página.

En una sola página de la aplicación, el usuario puede seguir trabajando durante días y nunca recargar la página principal donde los archivos CSS se declaró.El usuario no verá los cambios hasta que un Ctrl-F5 se emite.

Estoy seguro de que alguien ya pensó en ello y tener una experiencia para compartir :)

Para mí, el uso de WebSockets no es una opción.Primera, porque es una exageración, y la segunda porque no todos mis clientes apoyo de la tecnología.Misma razón se aplica a todos los WebSockets alternativas...No voy a seguir presionando mis servidores debido a esto.

Por lo tanto, cualquier ideas a nadie?:)

Por CIERTO, estamos usando AngularJS si que puede ayudar de una solución específica.

Gracias!

¿Fue útil?

Solución

He llegado a través de este mismo problema. Mi solución que está opinada y puede no responder a sus criterios:

Cuando empaqueta mi aplicación front-app y mi aplicación de servidor, comparto un archivo de configuración que contiene la versión actual de la aplicación frontal.

lado frontal: 75% de mis rutas cambian implícitamente a un servicio web (resolución de cambio de ruta). Por lo tanto, cada vez que llame a mi servidor, incluyo un encabezado HTTP personalizado (o un param Get / Post) que contiene la versión del cliente de la aplicación frontal.

SIERVE SIDE: COMPARO LA VERSIÓN DE APLICACIÓN FRONTA (la que está en el navegador del usuario, cargado el usuario Último usuario actualizado / cargado el SPA) con la versión delantera del archivo de configuración compartida:

  • Si la versión coincide: no hago nada.
  • Si la versión no coincide, envíe un código de error de estado HTTP personalizado (418, por ejemplo)

luego lado frontal: agregué un interceptor de respuesta que intercepta cualquier código de error 418 y realice una actualización de toda la aplicación

Eso es todo. Básicamente, el evento que "verifique" si la versión delantera es la última versión es un cambio de ruta (que llama a un WS a través de AJAX). Pero podrías agregar un intervalo de $ infinito que llama a un WS dedicado cada 5 minutos más o menos ... Puedo agregar algún código si es necesario.

Espero que esto ayude;)

Otros consejos

Asumiendo que usted está utilizando AngularJS' de enrutamiento a través de $servicio de la ruta y el proveedor, entonces usted puede utilizar $routeChangeSuccess evento para realizar una solicitud al servidor si hay cambios significativos que necesita ser cambiado;si hay, entonces usted puede hacer una ventana.ubicación.reload() para actualizar la página y obtener todos los recursos actualizados y htmls.

El siguiente proceso puede ser cambiado dependiendo de cómo desea implementar es:

1.Instalación de un archivo de configuración en su servidor, lo que indica que la aplicación de la versión.Usted también puede optar por asignar diferentes versiones para diferentes archivos pero ya que usted tiene concatenan todos sus archivos de recursos, entonces creo que usted puede limitar sus opciones de versión en su configuración.

2.Crear un servicio que contiene toda la información necesaria(versiones de archivos desde el servidor) y los métodos para realizar una solicitud al servidor para su servidor para comprobar en contra de la corriente versiones de archivos almacenados en el servicio.

3.Uso $routeChangeSuccess evento para realizar una solicitud al servidor utilizando el servicio que usted ha creado en el paso 2, si la petición devuelve una confirmación válido que hubo cambios, a continuación, hacer la fuerza a través de recargar la página window.location.reload().

Decidí agregar mis pensamientos finales como respuesta aquí también:

Fuimos a una solución reducida por ahora.

Como tenemos un "servicio proxy" que está (nuevamente por ahora) el único que interactúa con esta aplicación, agregamos la versión de solicitud en el encabezado HTTP de todas las respuestas.Si recibimos una versión más nueva, aparece una ventana emergente que notifica al usuario y se emite una actualización completa de la página ...

Esta solución no funcionará para aplicaciones que no tienen su propio servicio "privado".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top