A discussão é antiga, a guerra é longa, mas desta ves novamente eu ganhei.

No exemplo anterior, Flex X Cache ? 1° Round, não gostei do fato de que a cada vês que o usuário carregar o sistema, terá que carregar o SWF completo.

Então para resolver este problema, eu cheguei a mais fácil das soluções, renomear o Application!!

Por exemplo, criei um projeto novo hoje e chamei o application principal de main20090804.mxml, e publiquei no servidor. Agora imagina que dia 10/09/2009 o responsável pelo sistema, usuário do IE-ca me pede uma atualização. Eu faço e renomeio o application para main20090910.mxml.

Agora quando vou publicar no servidor eu renomeio o HTML que foi gerado para index.html. Simples assim e assim você terá o histórico de todas as versões.

Veja ao lado um dos sistemas como esta de atualização. O ultimo html gerado é renomeado e tenho o histórico de todas as alterações que foram feitas.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

Compartilhar no Facebook Compartilhar no Google + Compartilhar no Twitter Compartilhar no LinkedIn

15 comentários

  1. Rafael

    Valeu, ótima solução!

  2. Froskie

    Eu confesso que não entendi. Se você não gosta que o usuário carrega o SWF inteiro mas você renomeia forçando ele a carregar de novo. A aplicação não seria divida em módulos? Acho que me perdi nessa...

  3. Jan

    Cara isso é extremamente desnecessário.
    Isso ajuda o usuário mais vai atrapalhar seu trampo.

    Uma solução limpa deixar as dependências sem cache e o binário no cache, isso vai manter tudo atualizado sem peso demais pra o usuário a cada visita.

    Agora se seu swf é pesado d+, seu approach ta errado, vc pode otimizar mais.
    Eu nem quero imaginar como vc controla isso.

  4. Alemão

    @Froskie é necessário quando faz atualização no sistema. Neste caso preciso que seje ignora o que esta no cache e carregado o novo que esta no servidor

  5. Alemão

    @Jan O problema não é o SWF pesado demais, e sim as atualizações que preciso fazer no sistema. Estas atualizações devem ser carregadas por todos os usuários sem necessidade de limpar cache.

  6. Jan

    Ok mas veja um exemplo na prática: Se por exemplo você faz duas atualizações no mesmo dia? E se por alguma razão você precise dar um rollback pra uma delas?

    Agora imagina essa sua pasta c/ um arquivo? E vc controlando a versão de sua aplicação em um git por exemplo? Melhorou não?

    Voltando ao objetivo, se você mudou alguma funcionalidade lógica, não tem como, o usuário precisa baixar o arquivo inteiro certo? Pelo que entendi, vc quer usar o cache a favor, se não ha updates, vale a versão em cache, senão baixa a nova.

    Você pode simplesmente colocar no request do swf no seu index algo assim:
    main.swf?version=N
    Onde N é o número do build do seu app por exemplo.

    É legal ter essa preucupação com o usuário, pq é bem chato o cara dar um refresh na pagina e tudo aquilo começar de novo.

    Ta ai a dica ;)

  7. Mario Junior

    Em 2005 a Adobe já publicou um TechNote sobre o cache de SWFs
    http://kb2.adobe.com/cps/147/tn_14743.html

  8. Alemão

    @Mário O cache é util mais as vezes atrapalha. Então este segundo POST escrevi para manter o cache a meu favor. No O Cache é util para economizar recursos de rede enquanto uma nova versão não é lançada.

  9. Não é mais fácil aprender a configurar o cache do servidor web ao invés de fazer gambiarra? O=)

  10. Eduardo Kraus

    Não.

    Você terá que fazer isso em todos os clientes que utilizarem seu sistema.

    Imagina pedir a todos?

  11. Silvio

    Ótimo!

  12. Ricardo Canelas

    Eu gosto do Flashvars.

    Mas isso também pode ajudar,
    http://httpd.apache.org/docs/2.2/mod/mod_expires.html

  13. Eduardo Kraus

    O FlashVars não interfere no cache. Ele foi criado para evitar que atrapalhe o cache.

    O mod_expires é útil sim, mais o problema que o cache é util e não pode ser encarado como algo maléfico aos nossos sistemas.

  14. Vieira

    Eduardo, até hoje ronda esse fantasma em nossas aplicações, visto que sempre tem gente nova....  eu sou um deles.
    Então!!

    Meu cenário é o seguinte:
    Flex Builder3 ver 3.2
    Aplicação com janelas MDIWindows

    Alterei o arquivo AC_OETags.js a
    função AC_FL_RunContent()
    para forçar o carregamento do swf.

    Fiz somente uma alteração em uma janela e recompilei..
    Atualizei o Servidor com o swf desta tela.

    Só que no I.E. nada aconteceu, continua executando a tela antiga.

    E agora?  me dê uma ajuda! não aguento mais falar com os usuários que eles tem que limpar o cache do browser, mas mesmo assim isso não resolve.

    Agradeço a sua atenção.

    Abraços,
    Vieira.

  15. Eduardo Kraus

    Ola Vieira.

    Tente alterar o index.html para index.php.

    Ai adiciona no PHP:
    <?php
      header("Cache-Control: no-cache, must-revalidate");
      header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    ?>

    Isso força o browser a não fazer cache do Index.php

Deixe uma resposta