Pergunta

Hoje uma pergunta foi criada aqui e eu não tenho uma resposta evidente.

Suponha que concatenamos e minifiquem todos os arquivos de recursos (CSS e JavaScript) e declaramos-os na "Master-Page".

Em um aplicativo de várias páginas, se um arquivo CSS for alterado, ele será recarregado na próxima carga de página completa.

Em um aplicativo de página única, o usuário pode continuar trabalhando por dias e nunca recarregar a página principal onde os arquivos CSS são declarados.O usuário nunca verá as alterações até que um CTRL-F5 seja emitido.

Tenho certeza que alguém já pensou nisso e ter uma experiência para compartilhar :)

Para mim, usando WebSockets não é uma opção.Primeiro porque é exagero e segundo, porque nem todos os meus clientes apóiam a tecnologia.O mesmo motivo se aplica a todos os WebSockets Fallbacks ... Eu não vou continuar batendo meus servidores por causa disso.

Então, qualquer ideia alguém?:)

BTW, estamos usando o AngularJs se isso puder ajudar para uma solução específica.

Obrigado!

Foi útil?

Solução

Eu passei por esse mesmo problema. Minha solução que é apreciada e pode não responder aos seus critérios:

Quando eu empacotar meu aplicativo front-app e meu servidor-aplicativo, compartilho um arquivo de configuração contendo a versão atual do aplicativo frontal.

Front Side: 75% das minhas rotas mudam implicitamente chamam um webservice (Resolver Route Alterar). Então, toda vez que eu chamo meu servidor eu incluo um cabeçalho HTTP personalizado (ou um get / postam param) contendo a versão do cliente do aplicativo frontal.

Lado do servidor: comparo a versão front-app (aquela no navegador do usuário, carregada da última vez que o usuário atualizou / carregou o SPA) com a versão front-app do arquivo de configuração compartilhada:

  • se a versão corresponder: eu não faço nada.
  • se a versão não corresponder eu enviar um código de erro de status HTTP personalizado (418 por exemplo)

Então frente: Adicionei um interceptor de resposta que intercepta qualquer código de erro 418 e faça uma atualização de força de todo o aplicativo

é isso. Basicamente, o evento que "check" se a versão front-app é a mais recente é uma mudança de rota (que chama um WS via Ajax). Mas você poderia adicionar algum intervalo de $ infinito chamando um WS dedicado a cada 5 minutos ou mais ... Eu posso adicionar algum código, se necessário.

Espero que isso ajude;)

Outras dicas

Supondo que você esteja usando o roteamento angularJS pelo serviço e provedor de $ rota e, em seguida, você pode usar o evento $routeChangeSuccess para executar uma solicitação de servidor, se houver alterações significativas que precise ser alteradas; Se houver algum, você pode fazer uma janela.location.reload () para atualizar a página e obter todos os recursos atualizados e HTMLs.

O processo a seguir pode ser alterado dependendo de como você deseja implementá-lo:

1 . Configure um arquivo de configuração no seu servidor indicando a versão do aplicativo. Você também pode optar por atribuir versões diferentes para arquivos diferentes, mas desde que você concatou todos os seus arquivos de recursos, eu acho que você pode limitar suas opções de versão em sua configuração.

2 . Crie um serviço que contenha todas as informações necessárias (versões de arquivos do servidor) e métodos para executar uma solicitação de servidor ao seu servidor para verificar as versões atuais do arquivo armazenadas no serviço.

3 . Use $ routechangossuccess evento para executar uma solicitação de servidor usando o serviço que você criou Na etapa 2 , se a solicitação retornar uma confirmação válida de que havia alterações, então faça o recarregar a página da força via window.location.reload().

Eu decidi adicionar meus pensamentos finais como uma resposta aqui também:

Nós fomos para uma solução reduzida por enquanto.

Como temos um "serviço proxy" que é (novamente por enquanto), o único que interage com este aplicativo, adicionamos a versão do aplicativo no cabeçalho HTTP de todas as respostas.Se recebermos uma versão mais recente, um pop-up aparecerá notificando o usuário e uma atualização de página completa é emitida ...

Esta solução não funciona para aplicativos que não têm seu próprio serviço "privado".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top