maio 26, 2010

Otimização do RichFaces e consciência no uso do ajax

Este post nasceu por causa de uma dificuldade encontrada em um projeto que encontrava-se na reta final, e tivemos que realizar algumas mudanças para obter a melhor performance e ter um melhor aproveitamento dos componentes que estavamos usando.Chega de papo furado, vamos ao que interessa. =)
O cenário em questão é JSF + RichFaces e a utilização do recurso Ajax. Após diversas e demoradas pesquisas na internet atrás de soluções aplicaveis ao meu contexto de uso, achei alguns pontos interessantes para a performance das requisições e outras mais para a otimização do sistema. Daí você me pergunta, qualé a diferença de performance das requisições para a otimização do sistema???

A otimização do sistema envolvendo o Richfaces é na hora de carregar o sistema no cliente. Nas configurações que é feito no arquivo web.xml, você tem alguns "macetes" que trazem alguma otimização para o sistema, em questão de banda, por exemplo.

<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</ param-name>
<param-value>true</param-value>
</context-param>

Esse trecho significa que antes de enviar para o cliente todas os scripts, ele irá compacta-los e somente depois, enviar um único arquivo compactado, contendo todos esses arquivos, sendo assim, tendo uma otimização do carregamento do sistema no cliente. :D

<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter </filter-class>
<init-param>
<param-name>forceparser</param-name>
<param-value>false</param-value>
</init-param>
</ Filter>

Com essa configuração 'true' o filter interpreta que TODAS as respostas deverão passar pelo parser,
que tem um custo para essa tarefa, e deixando ele como 'false', apenas as reponse ajax terão que ter
o parse  ajustado. Em uma aplicação com telas complexas, o ganho é consideravel. =)

<context-param>
<param-name>org.richfaces.LoadStyleStrategy </param-name>
<param-value>all</param-value>
</context-param>

Essa configuração informa ao container descarregar todos os arquivos de stylesheet no cliente na primeira requisição do cliente ao sistema, ou quando eles expirarem, claro. Uma vez carregados, o seu trafego de dados diminui e com isso suas request/response tendem a serem mais rápidas. :P

<context-param>
<param-name>org.richfaces.LoadScriptStrategy </param-name>
<param-value>all</param-value>
</context-param>

É o mesmo caso da configuração dos arquivos de stylesheet, porém nesse caso, serão os arquivos de javascript, scripts e relacionados que serão carregados uma única vez no cliente. Se já teve a curiosidade de ver a quantidade de scripts que o RichFaces possui, imagina que isso realmente pode ser vantajoso. =}

<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>enable-cache</param-name>
<param-value>true</ param-value> </init-param>
</filter>

Essa parte é pra habilitar no cliente o cache dos componentes do RichFaces. Uma boa, porque o RichFaces possui vários bibliotecas de JS, stylesheet, então deixando-as no cliente, é menos trafego.

<context-param>
<param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
<param-value>NEKO</param-value>
</context-param>

<context-param>
<param-name>org.ajax4jsf.xmlparser.NEKO</param-name>
<param-value> .* \ ..*</param-value>
</ context-param>

O padrão de parser do RichFaces é o Tidy, que por ventura é mais lento que o Neko, então aqui estamos informando ao container que é para utilizar o Neko, e o parser será utilizada nas páginas de todas as hierarquias do projeto (.*\..*).
Tudo descrito acima é para a otimização do sistema, porque essas configurações tem por finalidade otimizarem o carregamento dos componentes na tela, utilizando-se de compactações e cache no lado cliente, que fará que um o sistema seja carregado mais lento na primeira vez, para se ter ganhos subsequentes. =D

Agora vem a parte diretamente ligado ao Ajax do RichFaces, que no meu caso, foi o meu maior vilão, e depois de compreendido, tornou-se meu maior aliado (bonito isso não?).

AjaxSingle = true
A utilização desde atributo, verdadeiro, faz com que o mapa de requisições ajax seja desprezado, e o envio para o servidor é apenas para o atributo em questão. Exemplo: Combos de Estado e Municipio, para atualizar o municipio, você precisa apenas do Estado.

limitToList = true
Esse atributo é bem útil e interessante, quando conhece a sua finalidade e o seu uso é no lugar devido. Quando verdadeiro, ele assegura que apenas os id's que estão no reRender do componente serão atualizados. É o caso de uma página com diversos campos, e você precisa apenas atualizar o municipio, utilizando-se deste atributo e no reRender você informar o id do municipio, o response ajax, irá atualizar apenas o municipio, e não irá passar nos get's dos outros atributos. :)
* Essa limitação é valida para os componentes que utilizando de ajaxRendered = true (a:form, a:outPutPanel e a:panel)

immediate = true
Quando verdadeiro, força o JSF a pular a fase de validação do objeto e ir imediatamente para a fase de atribuição dos valores ao objeto. Menos uma fase do JSF, mais ágil se torna o request.

process = id's
O uso deste atributo juntamente com o ajaxSingle, limiToList e immediate diria eu, que é o casamento perfeito :D. Neste atributo você informa o id's que serão necessários para realizar algum tipo de request. Exemplo: Para atualizar o municipio, você precisa ter o valor do estado, se você utilizar o ajaxSingle=true e immediate=true, provavelmente ele não irá postar nenhum valor, mas, utilizando-se dos mesmos e também o process=idEstado, você irá forçar que o JSF na hora de enviar a requisição do estado, e para reRender o municipio ele precisa do atributo 'idEstado' e com isso o valor será passado ao set do atributo, e podendo assim, atualizar a lista de municipios. :D

region
É uma propriedade assim como o a:outPutPanel, a:form e a:panel, porém, com a funcionalidade de limitar-se uma região onde determinadas informações serão reRenderizadas. Exemplo: De uma página que você precise atualizar vários campos em detrimento de uma opção escolhida, ao invez de passar vários id's, você pode deixa-los dentro de uma region, e reRenderizar, apenas este.

dataTable
A utilização das tabelas do RichFaces(rich:dataTable e rich:extendedDataTable) devem ser somente em casos que você precise realmente de componentes com mais recursos, quando a necessidade for apenas exibir informações para o usuário, utilize o h:dataTable. Em último caso use o richExtendedDataTable, porque é a tabela com maiores recursos e maior custo de renderização dos componentes.

Espero que este post tenha ajudado-lhe de alguma forma, porque perdi algumas várias horas pesquisando e lendo informações as vezes de ctrl+c e ctrl+v na internet que ao invez de ajuda, me trouxeram mais dúvidas, e depois de muita luta aprendi a utilizar estes recursos de maneira e me proporcionarem o melhor que si, e não o contrário.

Good luck ;-)

abril 24, 2009

Lançado Bluetooth 3.0 HighSpeed

A noticia de que o Bluetooth iria passar por várias modificações e melhorias foi bastante comentada e discutida em diversos fóruns e blogs, mas agora finalmente saiu uma noticia oficial, para confirmar as nossas espectativas, foi lançado essa semana em Tokyo na reunião anual do Bluetooth Special Interest Group SIG, o grupo responsável por manter a tecnologia ativa.
Essa nova tecnologia trás novidades interessantes, porque muda o pouco a idéia de que o bluetooth era apenas uma tecnologia para trocas de joguinhos entre celulares, isso se dava pelo fato de a velocidade ser relativamente baixa. O novo padrão a ser adotado na versão Bluetooth 3.0 é que será adotado o protocolo 802,11 Adaptation Layer Protocol(PAL) e o Generic Alternate MAC / PHY(AMP).
Com estas novas especificações a tecnologia passa a ter uma velocidade aproximadamente de 24Mbps, além de ter uma grande avanço na questão de economia de energia, pelo fato de ser ter maior controle sobre a potencia da tecnologia.
Neste contexto, todos saem ganhando, tanto os fabricantes que podem explorar novas funcionalidades e aguçar a criativedade, quanto nos consumidores que além de realizar transferências de fotos e jogos de devices mobile, também será possível sincronizar bibliotecas inteiras de músicas entre PC e leitor de música do telefone, baixar e enviar fotos de um PC ou impressora e o envio de vídeo para o PC ou até mesmo para uma televisão.
Essas especificações por enquanto é apenas o primeiro passo na vida deste produto, que está sendo cotado para estar no mercado em algo em torno de 9 a 12 meses.
Como o SIG é composto por várias empresas grandes no setor de mobile e tecnologia, o que podemos esperar é que eles também querem o mais breve ver essa tecnologia sendo utilizada pelos seus milhares de clientes, enquanto ainda não temos essa tecnologia no mercado, ficamos na expectativa e já imaginando algumas coisas que poderão ser feitas com essa tecnologia.

abril 09, 2009

Brasil vai adotar o Java-DTV no Ginga da TV digital

Depois de meses de discussão sobre qual padrão seria adotado para a TV Digital no Brasil, o Fórum SBTVD definiu por unanimidade e sem grandes polêmicas como se imaginava na última segunda-feira(06/04). A decisão foi definida por 12 votos a um, e ficou definido que o padrão adotado será o Java DTV(especificação livre, recém criada pela Sun) para ser adotado no Ginga-J, o middleware da TV digital.
A discussão se arrastou por vários meses pelo fato do padrão criado pela Sun, tem pouca popularidade em outros mercados, por isso o fórum tinha dúvidas entre a adoção do Java DTV ou do GEM (GloballyExecutable MHP), além de maior popularidade em outros mercados o padrão GEM tem a cobrança de royalties maior que o padrão criado pela Sun.
No entanto, o Fórum SBTVD decidiu optar pelo padrão aberto da Sun, que a principio a Sun havia estipulado o valor de R$0,89 por equipamento, a serem pagos sob a forma de royalties, mas foi constado também que outros fabricantes cobram pela mesma tecnologia da Sun um valor de R$0,40 por equipamento.
O fórum deliberou, então, que fique a cargo do governo brasileiro renegociar os valores com a Sun e fazer com que o preço mais baixo seja estendo aos demais países latino-americanos.
Já se ouve rumores que a Sun não aceitara abaixar o preço por menos de R$0,60 por equipamento.
A pergunta que fica é, e quem estava estava fazendo o GEM aqui no Brasil, vai tudo para o lixo?Quem já comprou os set-top boxes, os perdeu?
Enfim, são essas e outras perguntas que serão esclarecidas ao longo da implantação desse padrão.

abril 07, 2009

Maverick Secure Mobile

Quem nunca perdeu um celular em alguma festa, ou o deixou em um lugar que nunca mais se lembrou, ou pior, quem já foi roubado sabe que é muito desagradável perder o seu celular, que muitas das vezes guardam coisas importantes de nossas vidas.
Pois é, a empresa Maverick Mobile Solution desenvolveu um aplicativo mobile que funciona da seguinte forma, você instala ela no seu celular e você terá que informar um segundo telefone, no caso de um amigo, parente, enfim, esse telefone cadastrado passará a ser um dispositivo que irá rastrear o seu celular.
O telefone perdido/roubado não terá utilidade para nada, porque a pessoa terá que digitar a senha do aplicativo que você tinha cadastrado. Através do numero cadastrado, apartir de uma ligação você consegue bloquear o seu aparelho, rastreá-lo e até mesmo recuperar seus dados.
Uma coisa bem interessante também é que se a pessoa que achou o telefone e estiver mal intencionado, através de uma simples tentativa de ligação do seu aparelho encontrado, você pode transforma essa ligação em uma escuta juntamente com o aparelho cadastrado, e além disso você pode acionar uma sirene que ficara tocando no seu aparelho enquanto ele tiver bateria.
Bom, no caso fica a dica para todos deste serviço, a versão do software ainda está disponivel para Symbian S60 2nd edition and 3rd edition.

Para mais detalhes, acesse: http://www.maverickmobile.in/maverick/product.jsp

março 30, 2009

Novidades no mundo mobile

Temos algumas noticias bem legais para o mundo mobile, que vieram em meio a boatos e talvez virem realidade antes mesmo que esperavamos, uma das novidades bacana é que a empresa BSQUARE vai portar o Adobe Flash para o Android. A empresa desenvolve aplicações para dispositivos móveis, não deu muitos detalhes sobre o assunto, mas já deixou a noticia no ar que essa implementação já não está apenas na vontade dos usuários, mas também passou a ser uma idéia das próprias empresas desenvolvedoras. Outras informações, como data para lançamento, se essa implementação será para todos os usuários ou apenas para os novos, ainda não sabemos, mas de qualquer forma fica a noticia :D.
Outra informação é o Skype anunciou versões de seu produto para o iPhone e BlackBerry. A versão para o iPhone será lançada amanhã, durante o CTIA, evento de mobile em Las Vegas. A versão BlackBerry será lançada em maio. O motivo do lançamento primeiro da versão iPhone do produto, se diz pela enorme demanda de pedidos entre os usuários do aparelho da Apple, que era a solicitação de número 1 entre os usuários.

março 17, 2009

Evento do Mobile Marketing Association

Pelo 2° ano seguido, a Mobile Marketing Association traz ao Brasil o Mobile Marketing Forum Latin América.
O evento que acontece entre 24 e 26 de março, em São Paulo, é considerado como uma das maiores feiras da indústria de marketing móvel da América Latina.
O evento MMF, além de colocar o Brasil na rota de grandes eventos, para as tecnologias que estão em crescimento, também traz ao Brasil vários palestrantes importantes em todo o mundo, dentre eles terão Mike Wehrs (CEO mundial da Mobile Marketing Association, que reúne mais de 700 companhias em todo o mundo); Michael Becker(executivo da iLoop Mobile, uma das agências responsáveis pelas ações de mobile marketing da campanha de Obama); Russel Buckley(diretor-geral da AdMob, uma das maiores agências de marketing móvel do mundo. Entre outros nomes também estarão palestrantes de empresas como Nokia, Visa, além de representantes brasileiros e das principais agências de Argentina, Chile e da Venezuela.

Mais informações, acesse: http://www.mobilemarketingforum.com/?q=node/728

março 16, 2009

iPhone OS 3.0

A Apple está oficialmente convidando representantes da imprensa para participar do seu próximo evento, que será realizado em 17 de março. A Apple está convidando a todos para este evento, que tem como o principal tema: iPhone OS 3.0, mas por enquanto, nada foi declarado a respeito de se ter um lançamento de um novo aparelho celular, mas mesmo sem ter essa especulação, a expectativa é sempre grande por parte de todos.
A nós, meros mortais que não iremos participar deste evento, nos resta acompanhar tudo o que ocorreu pela internet, e também torcer para que ao menos alguns de nossos desejos sejam realizados, e que tenhamos uma felicidade imensa em sermos surpreendidos por novas funcionalidades. :D

Posts Relacionados