tag spa site gtag google javascript html html5 http single-page-application

javascript - spa - gtag js google analytics



Forzando una aplicación de una sola página para actualizar (4)

Podría comenzar a ejecutar un temporizador cuando devuelva una encuesta larga y si el usuario:

A. realiza una solicitud ajax

B. cambia las pestañas

C. está inactivo durante la duración del temporizador

Puede desencadenar una actualización.

Esto es lo más cercano a actualizar una aplicación de una sola página sin interponerse en la forma del usuario o pedirle que actualice la página.

Para aplicaciones de una sola página, ¿qué métodos existen para forzar la recarga de los archivos de página y / o JavaScript cuando se han implementado actualizaciones en el servidor?

Una forma obvia sería sondear algunos recursos del servidor para ver si la versión actual de la aplicación se está ejecutando en el navegador y, si no, cargar los recursos actualizados.

Me pregunto si hay métodos más generalmente aceptados que hagan uso de características específicas de HTTP o DOM.

actualizar

Estoy leyendo sobre el HTML5 Appcache. Esto parece estar más orientado a las aplicaciones que pueden ejecutarse sin requerir una conexión de servidor. No creo que esto pueda ser relevante para actualizar los recursos de un SPA (incluida la propia página) desde el servidor . ¿Estoy en lo correcto?


Si está utilizando .NET, puede usar SignalR para notificar a todos los clientes una actualización y luego desencadenar una recarga en el cliente.


applicationCache sería una excelente opción en este momento, pero está marcado como obsoleto y los estándares se están moviendo a los Trabajadores de Servicios , que actualmente no son ampliamente supported .

Estrategias generales con applicationCache

  1. Administre un solo archivo que actualice con hashes únicos para todos sus recursos
  2. Cree un nombre de archivo de caché único POR LIBERACIÓN que contenga sus recursos (supuestos) estáticos

Me inclino por la opción # 2, en la que una implementación elimina completamente el archivo de caché anterior y lo reemplaza por uno que tenga un nombre diferente, lo que desencadena el evento obsolete que se puede activar una recarga de página.

JavaScript

appCache.addEventListener(''obsolete'', handleCacheEvent, false); function handleCacheEvent() { // magic here ... prompt user, force reload, etc. }

HTML

<html manifest="http://yoursite/appinfo.semver-here.mf">

Si updateready la opción # 1, entonces se suscribiría al evento de updateready lugar:

appCache.addEventListener(''updateready'', handleCacheEvent, false);

Para empezar, usted podría hacer entradas de comodín y / o mantener la mayoría de sus activos marcados como recursos de NETWORK y pasarlos gradualmente al área CACHE medida que se sienta cómodo.

Ver:


Puede usar una solicitud de long polling para saber cuándo hay actualizaciones sin tener que hacer solicitudes en ciertos intervalos, y cuando se devuelve la solicitud de sondeo largo, puede actualizar toda la página, ya que los archivos y eventos antiguos de javascript estarían vinculados a elementos DOM. así que sería más fácil simplemente recargar la página.

EDITAR

Leí su comentario acerca de dejar que el usuario continúe usando la página, mientras las cosas están actualizadas, pero creo que esto es muy peligroso ... ¿sería demasiado malo simplemente mostrar una notificación para decirle al usuario que hay actualizaciones y recomendar que recarga la pagina?

De lo contrario, tendría que deshacer scripts anteriores, como desvincular eventos de elementos DOM.

Puede desenlazar eventos fácilmente usando jQuery: cómo desenlazar todos los eventos usando jquery Esto funciona para un elemento DOM, tendría que hacer esto para cada elemento DOM en la página.