Muito se discute em relação aos prós e contras de desenvolver apps mobile em suas plataformas nativas (Objective C, Java, etc) ou usar HTML com Java Script. Não quero gerar mais um campo de discussão em torno deste assunto, mas sim, explicar como funciona o básico de uma aplicativo mobile escrito em HTML e mostrar algumas vantagens desta técnica.

1. Não há mágicas e o HTML não se transforma em código nativo

OK, você construiu um sistema baseado em HTML, Java Script e CSS. Ele está todo no formato ideal para o iPhone (estou usando apenas como referência básica, pode ser algum aparelho com Android também!!!) por exemplo: como colocá-lo na loja da Apple? Para isso é preciso gerar um projeto dentro do XCode [o que é o XCode], compilá-lo e enviar para a loja de aplicativos da maçã. Como o HTML não é compilado, devemos usar um wrapper, ou seja, alguma ferramenta que encapsule nosso código Web dentro do esqueleto nativo do iOS. Vamos usar como base o PhoneGap [veja o site oficial do PhoneGap] que é muito simples e, para mim, tem a curva de aprendizagem mais tênue com ótima documentação.

O PhoneGap irá encapsular todo nosso código HTML dentro de um controle nativo do iOS, chamado UIWebView [saiba mais sobre um WebView]. Grosseiramente falando, seria um navegador invisível que irá interpretar nosso código. Sendo assim, fica claro que o código HTML, Java Script e CSS permanece intacto, sendo apenas encapsulado num elemento nativo da plataforma (iOS, Android, Symbian…..etc) e exportado como um pacote que poderá ser publicado na sua respectiva loja de apps.

Principal vantagem aqui: você escreve o código principal uma única vez. Não se iluda pensando que não terá de fazer ajustes aqui e ali de plataforma para plataforma. Mas convenhamos, que o trabalho será MUITO menor se escolhesse escrever um aplicativo para cada plataforma nativamente (não estou falando sobre preguiça, mas de produtividade =)

2. A performance deve ser levada em conta

Não há como negar que a performance em termos de velocidade de resposta aos cliques ou de processamento ainda é grande. Mesmo com a evolução de animações e gráficos feitos 100% por CSS3, sua performance ainda não está otimizada dentro dos WebViews e acaba sendo mais baixa do que seu equivalente construído nativamente.

Mesmo sabendo da performance mais baixa, defendo o fato que já podemos e devemos usar esta tecnologia, pois todos os fabricantes estão trabalhando para melhorar a compatibilidade de seu software com as linguagens Web. Um exemplo de melhoria é a capacidade de alocar processamento na placa de vídeo ao invés de usar o processador principal do computador: os navegadores (não me venha com papos sobre o IE…deixei a palavra navegadores em negrito exatamente por isso -.-“) mais modernos suportam esta técnica e transferem o processamento de animações/transições para a placa gráfica, dando um fôlego extra ao processador principal. [Leia mais em sobre aceleração 3D com CSS3: http://www.html5rocks.com/en/tutorials/speed/html5/#toc-hardware-accell]

Resumo da ópera: se você torce o nariz para a performance, relaxa…ela vai melhorar e em breve. Pelo que tenho acompanhado, esta questão estará de igual para igual em de 1 ano a 1 ano e meio (meados de 2013).

3. Acesso direto ao hardware

Este é o principal argumento quando falam sobre a escolha entre trabalhar no ambiente nativo, ou usar HTML. Sem dúvidas, usar diretamente algumas funcionalidade do hardware sem intermediários é muito mais simples e rápido. Levando este quesito em consideração, não podemos fazer muita coisa com o HTML. Atualmente, o PhoneGap consegue acessar os seguintes recursos de hardware:

– Acelerômetro
– Câmera
– Compasso
– Contatos
– Arquivos
– Geolocalização
– Mídia
– Rede
– Notificações: alerta, vibração e som
– Armazenamento

Eu me arrisco a dizer que cerca de 80% dos apps ja se satisfazem com estes recursos (nenhum dado com base em estudo científico…apenas dados de campo mesmo).  Mas na hora de desenvolver um jogo bem elaborado em openGL por exemplo, acredito que a melhor escolha seja ir pelo caminho nativo.

Abordei aqui os 3 pontos que vejo serem mais discutidos e relevantes para uma tomada de decisão antes de começar um novo projeto. Não escondo de forma alguma que minha inclinação é para o uso de tecnologias Web no desenvolvimento mobile e desktop, mas não sou hipócrita e sei que há muito o que melhorar em termos de experiência do usuário e escalabilidade na produção e padronização (ah, a padronização…essa me rendeu uma dissertação de conclusão de curso na faculdade).