Pergunta

Eu desenvolvi uma aplicação web usando MyFaces 1.2.6 e Richfaces 3.3.1GA (apenas upgrated). Apesar da facilidade de uso, eu descobri que os componentes RichFaces são muito lento.

Eu também descobri que eles realmente não tirar proveito do mecanismo de cache do navegador, eles continuam enviando algum arquivo JS péssimo cada solicitação e outras coisas. Eu realmente gostaria de aplicar algumas regras descritas no "High sites desempenho" livro, mas eu não posso mudar de js gerados e código HTML.

Alguém tem algumas dicas para ajuste de desempenho frontend usando Richfaces?

Graças.

Foi útil?

Solução

Ter uma leitura de este artigo .

Você está usando Firebug + YSlow para verificar o que está sendo armazenada em cache? Usando a configuração web.xml org.richfaces.LoadScriptStrategy, você pode dizer Richfaces que quer:

  • Coloque todos os scripts em um arquivo.
  • Carregue sem scripts (você fazê-lo sozinho em vez -. Por exemplo, na forma prescrita pelo seu livro).
  • scripts de carga quando necessário (o padrão).

Mas alguns princípios básicos:

  • Nunca coloque lógica em seus getters. Eles são chamados várias vezes e só deve retornar algo já preenchido por um outro método. Para exemplo, se você estiver encadeamento menus suspensos juntos utilizar um tag a4j:support no primeiro com um atributo de ação que cargas os dados, que é então recuperada quando você rerender o segundo.

  • Use o ajaxSingle="true" a menos você realmente quer enviar o todo formulário de volta para o servidor.

  • Não use um componente rico se você só precisa de um normal. Por exemplo não use rich:dataTable a menos que você estão fazendo uso de alguns dos características que ele tem sobre e acima h:dataTable.

Outras dicas

Você pode usar: org.ajax4jsf.DEFAULT_EXPIRE 31536000

Para que todos os js, css (gerados por richfaces) são armazenados em cache por 1 ano no navegador. Esta velocidade realmente melhorou em nosso projeto.

Além disso, nós não precisa se preocupar em se mudar richfaces versão que quando mudamos richfaces versão que irá gerar arquivos diferentes.

Para adicionar a Damo, você também pode adicionar um filtro pequeno para cache de tais js ou imagens para melhorar o desempenho. Mas exercem cautela ao fazer isso, se os arquivos a intenção de cach envolvem atualizações freqüentes.

private void cacheImages(HttpServletRequest request, 
        HttpServletResponse response) {
        try {
              String requestPath = request.getRequestURI();
              if (requestPath != null) {
                    if (requestPath.contains("/images/")
                                || requestPath.contains("/scripts/")
                                || requestPath.endsWith(".js")
                                || requestPath.endsWith(".gif")) {
                          response.setHeader("Cache-Control", "max-age=36000");
                    }
              }
        } catch (RuntimeException e) {
              // do nothing except log
              Log.error(this, e);
        }
  }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top