SlideShare una empresa de Scribd logo
1 de 63
BEST PRACTICES PARA
 DESENVOLVIMENTO
       MOBILE
   Pedro Cardoso - mobile.sapo.pt
        26 de Maio de 2010
• Introdução

•O   que são widgets

• Os   que se deve fazer
TIPOS DE APLICAÇÕES



App nativa   Widget   Webapp
APLICAÇÕES MÓVEIS

•   Programas que correm no telefone

•   Adaptados a ecrans pequenos, interacção simplificada

•   Com acesso ao hardware (filesystem, som, 3d, bluetooth, wifi, câmara,
    acelerómetro, etc)

•   Integração complexa no dispositivo

•   Podem funcionar offline e/ou online

•   Desenvolvidas em linguagens de baixo nível (C, C++, Java, Objective C)
MOBILE WEB


•A   web normal em versão reduzida

• Desenvolvimento    fácil (HTML, JavaScript, CSS)

• Limites   no que pode aceder no dispositivo
MOBILE WEB - WEBAPPS
MOBILE WEB - WEBAPPS


• Atalho   web como aplicação
MOBILE WEB - WEBAPPS


• Atalho   web como aplicação

• Suporte   de APIs HTML5
MOBILE WEB - WEBAPPS


• Atalho   web como aplicação

• Suporte   de APIs HTML5

• Necessário
           um proxy se necessário aceder a fontes de dados
 foram do domínio onde app está alojada
WIDGETS
WIDGETS

•   Widget híbrido app/web
WIDGETS

•   Widget híbrido app/web

•   Aplicações construídas em tecnologias web (JavaScript, HTML, CSS)
WIDGETS

•   Widget híbrido app/web

•   Aplicações construídas em tecnologias web (JavaScript, HTML, CSS)

•   Corre localmente no dispositivo, mas podem funcionar online e/ou
    offline
WIDGETS

•   Widget híbrido app/web

•   Aplicações construídas em tecnologias web (JavaScript, HTML, CSS)

•   Corre localmente no dispositivo, mas podem funcionar online e/ou
    offline

•   Correm num browser especializado, no ecran completo, sem
    elementos de UI
WIDGETS

•   Widget híbrido app/web

•   Aplicações construídas em tecnologias web (JavaScript, HTML, CSS)

•   Corre localmente no dispositivo, mas podem funcionar online e/ou
    offline

•   Correm num browser especializado, no ecran completo, sem
    elementos de UI

•   Cross-platform
PLATAFORMAS
•   Nokia WRT                         •   TVs

•   Windows Phone (WM 6.5)            •   Phonegap

•   Samsung                               •   Nokia WRT

•   Opera Widget Manager + Browser        •   iPhone

•   Palm webOS (Pre/Pixi)                 •   Android

•   Dashboard Mac / Windows Sidebar       •   Blackberry

•   LiMo                                  •   SonyEricsson WebSDK
MUNDIAL 2010
WIDGETS - VANTAGENS
WIDGETS - VANTAGENS

•   Portabilidade 
WIDGETS - VANTAGENS

•   Portabilidade 

•   Fácil de desenvolver e testar
WIDGETS - VANTAGENS

•   Portabilidade 

•   Fácil de desenvolver e testar

•   Possível aceder a algumas funcionalidades mais avançadas do
    hardware (GPS, acelerómetro, câmara)
WIDGETS - VANTAGENS

•   Portabilidade 

•   Fácil de desenvolver e testar

•   Possível aceder a algumas funcionalidades mais avançadas do
    hardware (GPS, acelerómetro, câmara)

•   Menos limitações que web (XHR)
WIDGETS - VANTAGENS

•   Portabilidade 

•   Fácil de desenvolver e testar

•   Possível aceder a algumas funcionalidades mais avançadas do
    hardware (GPS, acelerómetro, câmara)

•   Menos limitações que web (XHR)

•   Acesso a outras funcionalidades (softkeys)
WIDGETS - VANTAGENS

•   Portabilidade 

•   Fácil de desenvolver e testar

•   Possível aceder a algumas funcionalidades mais avançadas do
    hardware (GPS, acelerómetro, câmara)

•   Menos limitações que web (XHR)

•   Acesso a outras funcionalidades (softkeys)

•   Resultados aceitáveis
WIDGETS - DESVANTAGENS
WIDGETS - DESVANTAGENS

• Difícil   atingir look&feel de app nativa
WIDGETS - DESVANTAGENS

• Difícil   atingir look&feel de app nativa

• Integração     em menor escala
WIDGETS - DESVANTAGENS

• Difícil   atingir look&feel de app nativa

• Integração     em menor escala

• Plataformas     imaturas
WIDGETS - DESVANTAGENS

• Difícil   atingir look&feel de app nativa

• Integração     em menor escala

• Plataformas     imaturas

• Discrepâncias     nas implementações
WIDGETS - DESVANTAGENS

• Difícil   atingir look&feel de app nativa

• Integração     em menor escala

• Plataformas     imaturas

• Discrepâncias     nas implementações

• Performance
WIDGETS - DESVANTAGENS

• Difícil   atingir look&feel de app nativa

• Integração     em menor escala

• Plataformas     imaturas

• Discrepâncias     nas implementações

• Performance

• Impossibilidade    de alguns tipos de apps
ESTRATÉGIAS PARA LIDAR
   COM LIMITAÇÕES
ESTRATÉGIAS PARA LIDAR
       COM LIMITAÇÕES


• Menor   denominador comum
ESTRATÉGIAS PARA LIDAR
       COM LIMITAÇÕES


• Menor   denominador comum

• Adaptação   progressiva
ESTRATÉGIAS PARA LIDAR
        COM LIMITAÇÕES


• Menor   denominador comum

• Adaptação   progressiva

• Particularizar   casos consoante plataforma
COMPILAÇÃO

•   Maioria dos casos, ZIP com o conteúdo e um ficheiro de configuração.

    •   make, ant, shell scripts, batch files, etc

•   zip -r foo.wgt src/*

•   zip -r foo.wgz src/

•   palm-package src

•   cp -R src dist/foo.wdgt

•   Código acessível: JavaScript Minifiers + obfuscators
DESAFIOS

•   Conectividade à internet    •   Memória

•   Persistência de dados       •   Capacidade de CPU

•   Tamanhos de ecran muito     •   Browsers limitados (IE,
    diferentes (pixels, DPIs)       Netfront, Blackberry, Webkits)

•   Com/sem touch               •   Plataformas heterogéneas

•   Com/sem cursor
HTML5


• Nãosuportado na maioria dos casos ou apenas parcialmente
 suportado.

• Storage

• Geo-location
CSS3

• Media   queries             • Animações   CSS

• text-shadow                 • SVG/VML

• border-image

• background   gradients

• border-radius

• <canvas>
O QUE FAZER?
RESUMIDAMENTE...

•   Hierarquia HTML o mais         •   Fazer o processamento pesado
    simples possível                   no servidor

•   Regras CSS simples             •   Feeds pequenos

•   JavaScript simples             •   Usar JSON

•   Evitar frameworks pesadas      •   Manter cache da informação

•   Evitar iframes                 •   Persistência

•   Usar tabelas se fizer sentido
HTML SIMPLES

•   Estruturas complexas ou longas

•   Deep nesting

•   Reduzir o número de elementos

•   Reduzir profundidade do DOM

•   Não usar estruturas complexas para efeitos simples

    •   Cantos redondos

    •   <em> ou <span> em vez de <b><i>...</i><b>
CSS SIMPLES
•   Regras de CSS complexas ou           •   Simplificar CSS
    pouco eficientes
                                         •   Usar <table> se necessário
•   Processamento direita para a
    esquerda                             •   Regras direcionadas

    #menu .item a { ... }                •   #especifica
                                             div.menos-especifica
    ‣   Todos os <a>                         .ainda-menos
                                             .ainda-menos div
    ‣   Todos os <a> dentro de .item         div
    ‣   Todos os .item dentro de #menu
JAVASCRIPT SIMPLES

                                  •   Literais em vez de operador
•   Seleccionar elementos
                                      “new” (var arr = [], obj = {})
•   Iterar sobre o DOM
                                  •   Simplificar tratamento de
•   Estruturas de dados grandes       eventos

•   Seleccionar elementos por     •   Evitar frameworks,
    ID ou tagName e guardar em        implementar subconjunto de
    memória referência se             funcionalidades necessárias
    necessário reutilizar
                                  •   Juntar manipulações ao DOM
•   Evitar loops desnecessários
                                  •   Pedidos AJAX pequenos
PERFORMANCE
PERFORMANCE


• Fingir!
PERFORMANCE


• Fingir!

• Mudar   estado de links activos
PERFORMANCE


• Fingir!

• Mudar   estado de links activos

• Indicador   de acesso à rede/processamento
PERFORMANCE


• Fingir!

• Mudar   estado de links activos

• Indicador   de acesso à rede/processamento

• Especificar   background/width/height nas imagens (placeholder)
CSS SPRITES

• Depende...
OPTIMIZAÇÃO DE IMAGENS
OPTIMIZAÇÃO DE IMAGENS


• Evitar   alpha-channel
OPTIMIZAÇÃO DE IMAGENS


• Evitar   alpha-channel

• Usar   PNGs com palette, não RGB
OPTIMIZAÇÃO DE IMAGENS


• Evitar   alpha-channel

• Usar   PNGs com palette, não RGB

• Limpar    PNGs: usar pngcrush
OPTIMIZAÇÃO DE IMAGENS


• Evitar   alpha-channel

• Usar   PNGs com palette, não RGB

• Limpar    PNGs: usar pngcrush

• Usar   imagens com tamanho adequado
NOKIA WRT
                       (S60 5TH)

• Lento   com muitos gráficos

• Webkit    antigo

• Bugs, diferenças   entre modelos

• Updates    apagam preferências da app

• Sistema   de storage simples, apenas para dados pequenos
WINDOWS PHONE


• IE6   com suporte de PNG

• Storage   limitado

• Sem    posicionamento fixo

• Lento
PALM PRE


• Rápido

• API   muito rica

• Webkit   relativamente recente

• Não   são widgets, mas aplicam-se os mesmos conceitos
JAVASCRIPT LIBRARIES
•   LibSAPO.js                      •   Emile.js
    http://softwarelivre.sapo.pt/       http://github.com/madrobby/emile
    libsapojs
                                    •   baseJS
•   jQuery                              http://paularmstrongdesigns.com/
    http://jquery.com/                  projects/basejs/

•   Prototype                       •   iUI
    http://prototypejs.org/             http://code.google.com/p/iui/

•   JQTouch                         •   xui
    http://www.jqtouch.com/             http://xuijs.com/
OBRIGADO



pedro.cardoso@co.sapo.pt

      @pcardoso

Más contenido relacionado

La actualidad más candente

Aula 4. bibliotecas js
Aula 4. bibliotecas jsAula 4. bibliotecas js
Aula 4. bibliotecas jsandreluizlc
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreGivanaldo Rocha
 
Phonegap - self RJ
Phonegap - self RJPhonegap - self RJ
Phonegap - self RJjavamanrj
 
Curso Wordpress para iniciantes
Curso Wordpress para iniciantesCurso Wordpress para iniciantes
Curso Wordpress para iniciantesMultimidia e Arte
 
Lançamento do livro "De A a Zabbix" no IFPB
Lançamento do livro "De A a Zabbix" no IFPBLançamento do livro "De A a Zabbix" no IFPB
Lançamento do livro "De A a Zabbix" no IFPBAécio Pires
 
Gerência de redes com Zabbix: conhecendo a ferramenta
Gerência de redes com Zabbix: conhecendo a ferramentaGerência de redes com Zabbix: conhecendo a ferramenta
Gerência de redes com Zabbix: conhecendo a ferramentaAécio Pires
 
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
 Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In... Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...Zabbix BR
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
 
Zabbix para iniciantes
Zabbix para iniciantesZabbix para iniciantes
Zabbix para iniciantesWerneck Costa
 
Usando os Recursos do Joomla! ao Máximo
Usando os Recursos do Joomla! ao MáximoUsando os Recursos do Joomla! ao Máximo
Usando os Recursos do Joomla! ao MáximoPedro Renan
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-endertdc-globalcode
 
Minicurso - Desenvolvimento de sites com WordPress
Minicurso - Desenvolvimento de sites com WordPressMinicurso - Desenvolvimento de sites com WordPress
Minicurso - Desenvolvimento de sites com WordPressJackson Meires
 
Performance em-front-end-luiz-tanure
Performance em-front-end-luiz-tanurePerformance em-front-end-luiz-tanure
Performance em-front-end-luiz-tanureLuiz Tanure
 

La actualidad más candente (18)

Aula 4. bibliotecas js
Aula 4. bibliotecas jsAula 4. bibliotecas js
Aula 4. bibliotecas js
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software Livre
 
Phonegap - self RJ
Phonegap - self RJPhonegap - self RJ
Phonegap - self RJ
 
Curso Wordpress para iniciantes
Curso Wordpress para iniciantesCurso Wordpress para iniciantes
Curso Wordpress para iniciantes
 
Criar um website
Criar um websiteCriar um website
Criar um website
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Lançamento do livro "De A a Zabbix" no IFPB
Lançamento do livro "De A a Zabbix" no IFPBLançamento do livro "De A a Zabbix" no IFPB
Lançamento do livro "De A a Zabbix" no IFPB
 
Gerência de redes com Zabbix: conhecendo a ferramenta
Gerência de redes com Zabbix: conhecendo a ferramentaGerência de redes com Zabbix: conhecendo a ferramenta
Gerência de redes com Zabbix: conhecendo a ferramenta
 
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
 Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In... Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Zabbix para iniciantes
Zabbix para iniciantesZabbix para iniciantes
Zabbix para iniciantes
 
Usando os Recursos do Joomla! ao Máximo
Usando os Recursos do Joomla! ao MáximoUsando os Recursos do Joomla! ao Máximo
Usando os Recursos do Joomla! ao Máximo
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-ender
 
Joomla! para iniciantes
Joomla! para iniciantesJoomla! para iniciantes
Joomla! para iniciantes
 
Minicurso - Desenvolvimento de sites com WordPress
Minicurso - Desenvolvimento de sites com WordPressMinicurso - Desenvolvimento de sites com WordPress
Minicurso - Desenvolvimento de sites com WordPress
 
Palestra Zabbix no 12 Geinfo (2013)
Palestra Zabbix no 12 Geinfo (2013)Palestra Zabbix no 12 Geinfo (2013)
Palestra Zabbix no 12 Geinfo (2013)
 
Performance em-front-end-luiz-tanure
Performance em-front-end-luiz-tanurePerformance em-front-end-luiz-tanure
Performance em-front-end-luiz-tanure
 

Similar a Melhores práticas para desenvolvimento mobile

Sapo Sessions - Web Mobile
Sapo Sessions - Web MobileSapo Sessions - Web Mobile
Sapo Sessions - Web MobileBruno Carreira
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013javamanrj
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpCampus Party Brasil
 
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações WebFrameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações WebJairo Junior
 
HTML5 Mobile Aula 1
HTML5 Mobile Aula 1HTML5 Mobile Aula 1
HTML5 Mobile Aula 1Jose Berardo
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsAndre Baltieri
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTGDGFoz
 
Portando sua aplicação web para iphone
Portando sua aplicação web para iphonePortando sua aplicação web para iphone
Portando sua aplicação web para iphoneRenato Nitta
 
Write once, run "everywhere"
Write once, run "everywhere"Write once, run "everywhere"
Write once, run "everywhere"Stefan Horochovec
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDenis Vieira
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
 
Integração do Zabbix com Grafana
Integração do Zabbix com GrafanaIntegração do Zabbix com Grafana
Integração do Zabbix com GrafanaAécio Pires
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperCesar Romero
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKRyan Padilha
 

Similar a Melhores práticas para desenvolvimento mobile (20)

Sapo Sessions - Web Mobile
Sapo Sessions - Web MobileSapo Sessions - Web Mobile
Sapo Sessions - Web Mobile
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações WebFrameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
 
HTML5 Mobile Aula 1
HTML5 Mobile Aula 1HTML5 Mobile Aula 1
HTML5 Mobile Aula 1
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
 
Internet sem drama
Internet sem dramaInternet sem drama
Internet sem drama
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoT
 
Portando sua aplicação web para iphone
Portando sua aplicação web para iphonePortando sua aplicação web para iphone
Portando sua aplicação web para iphone
 
Write once, run "everywhere"
Write once, run "everywhere"Write once, run "everywhere"
Write once, run "everywhere"
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full Javascript
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Integração do Zabbix com Grafana
Integração do Zabbix com GrafanaIntegração do Zabbix com Grafana
Integração do Zabbix com Grafana
 
Webstandardsppt
WebstandardspptWebstandardsppt
Webstandardsppt
 
Silverlight
SilverlightSilverlight
Silverlight
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack Developer
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 

Melhores práticas para desenvolvimento mobile

  • 1. BEST PRACTICES PARA DESENVOLVIMENTO MOBILE Pedro Cardoso - mobile.sapo.pt 26 de Maio de 2010
  • 2. • Introdução •O que são widgets • Os que se deve fazer
  • 3. TIPOS DE APLICAÇÕES App nativa Widget Webapp
  • 4. APLICAÇÕES MÓVEIS • Programas que correm no telefone • Adaptados a ecrans pequenos, interacção simplificada • Com acesso ao hardware (filesystem, som, 3d, bluetooth, wifi, câmara, acelerómetro, etc) • Integração complexa no dispositivo • Podem funcionar offline e/ou online • Desenvolvidas em linguagens de baixo nível (C, C++, Java, Objective C)
  • 5. MOBILE WEB •A web normal em versão reduzida • Desenvolvimento fácil (HTML, JavaScript, CSS) • Limites no que pode aceder no dispositivo
  • 6. MOBILE WEB - WEBAPPS
  • 7. MOBILE WEB - WEBAPPS • Atalho web como aplicação
  • 8. MOBILE WEB - WEBAPPS • Atalho web como aplicação • Suporte de APIs HTML5
  • 9. MOBILE WEB - WEBAPPS • Atalho web como aplicação • Suporte de APIs HTML5 • Necessário um proxy se necessário aceder a fontes de dados foram do domínio onde app está alojada
  • 11. WIDGETS • Widget híbrido app/web
  • 12. WIDGETS • Widget híbrido app/web • Aplicações construídas em tecnologias web (JavaScript, HTML, CSS)
  • 13. WIDGETS • Widget híbrido app/web • Aplicações construídas em tecnologias web (JavaScript, HTML, CSS) • Corre localmente no dispositivo, mas podem funcionar online e/ou offline
  • 14. WIDGETS • Widget híbrido app/web • Aplicações construídas em tecnologias web (JavaScript, HTML, CSS) • Corre localmente no dispositivo, mas podem funcionar online e/ou offline • Correm num browser especializado, no ecran completo, sem elementos de UI
  • 15. WIDGETS • Widget híbrido app/web • Aplicações construídas em tecnologias web (JavaScript, HTML, CSS) • Corre localmente no dispositivo, mas podem funcionar online e/ou offline • Correm num browser especializado, no ecran completo, sem elementos de UI • Cross-platform
  • 16. PLATAFORMAS • Nokia WRT • TVs • Windows Phone (WM 6.5) • Phonegap • Samsung • Nokia WRT • Opera Widget Manager + Browser • iPhone • Palm webOS (Pre/Pixi) • Android • Dashboard Mac / Windows Sidebar • Blackberry • LiMo • SonyEricsson WebSDK
  • 19. WIDGETS - VANTAGENS • Portabilidade 
  • 20. WIDGETS - VANTAGENS • Portabilidade  • Fácil de desenvolver e testar
  • 21. WIDGETS - VANTAGENS • Portabilidade  • Fácil de desenvolver e testar • Possível aceder a algumas funcionalidades mais avançadas do hardware (GPS, acelerómetro, câmara)
  • 22. WIDGETS - VANTAGENS • Portabilidade  • Fácil de desenvolver e testar • Possível aceder a algumas funcionalidades mais avançadas do hardware (GPS, acelerómetro, câmara) • Menos limitações que web (XHR)
  • 23. WIDGETS - VANTAGENS • Portabilidade  • Fácil de desenvolver e testar • Possível aceder a algumas funcionalidades mais avançadas do hardware (GPS, acelerómetro, câmara) • Menos limitações que web (XHR) • Acesso a outras funcionalidades (softkeys)
  • 24. WIDGETS - VANTAGENS • Portabilidade  • Fácil de desenvolver e testar • Possível aceder a algumas funcionalidades mais avançadas do hardware (GPS, acelerómetro, câmara) • Menos limitações que web (XHR) • Acesso a outras funcionalidades (softkeys) • Resultados aceitáveis
  • 26. WIDGETS - DESVANTAGENS • Difícil atingir look&feel de app nativa
  • 27. WIDGETS - DESVANTAGENS • Difícil atingir look&feel de app nativa • Integração em menor escala
  • 28. WIDGETS - DESVANTAGENS • Difícil atingir look&feel de app nativa • Integração em menor escala • Plataformas imaturas
  • 29. WIDGETS - DESVANTAGENS • Difícil atingir look&feel de app nativa • Integração em menor escala • Plataformas imaturas • Discrepâncias nas implementações
  • 30. WIDGETS - DESVANTAGENS • Difícil atingir look&feel de app nativa • Integração em menor escala • Plataformas imaturas • Discrepâncias nas implementações • Performance
  • 31. WIDGETS - DESVANTAGENS • Difícil atingir look&feel de app nativa • Integração em menor escala • Plataformas imaturas • Discrepâncias nas implementações • Performance • Impossibilidade de alguns tipos de apps
  • 32. ESTRATÉGIAS PARA LIDAR COM LIMITAÇÕES
  • 33. ESTRATÉGIAS PARA LIDAR COM LIMITAÇÕES • Menor denominador comum
  • 34. ESTRATÉGIAS PARA LIDAR COM LIMITAÇÕES • Menor denominador comum • Adaptação progressiva
  • 35. ESTRATÉGIAS PARA LIDAR COM LIMITAÇÕES • Menor denominador comum • Adaptação progressiva • Particularizar casos consoante plataforma
  • 36. COMPILAÇÃO • Maioria dos casos, ZIP com o conteúdo e um ficheiro de configuração. • make, ant, shell scripts, batch files, etc • zip -r foo.wgt src/* • zip -r foo.wgz src/ • palm-package src • cp -R src dist/foo.wdgt • Código acessível: JavaScript Minifiers + obfuscators
  • 37. DESAFIOS • Conectividade à internet • Memória • Persistência de dados • Capacidade de CPU • Tamanhos de ecran muito • Browsers limitados (IE, diferentes (pixels, DPIs) Netfront, Blackberry, Webkits) • Com/sem touch • Plataformas heterogéneas • Com/sem cursor
  • 38. HTML5 • Nãosuportado na maioria dos casos ou apenas parcialmente suportado. • Storage • Geo-location
  • 39. CSS3 • Media queries • Animações CSS • text-shadow • SVG/VML • border-image • background gradients • border-radius • <canvas>
  • 40.
  • 42. RESUMIDAMENTE... • Hierarquia HTML o mais • Fazer o processamento pesado simples possível no servidor • Regras CSS simples • Feeds pequenos • JavaScript simples • Usar JSON • Evitar frameworks pesadas • Manter cache da informação • Evitar iframes • Persistência • Usar tabelas se fizer sentido
  • 43.
  • 44.
  • 45. HTML SIMPLES • Estruturas complexas ou longas • Deep nesting • Reduzir o número de elementos • Reduzir profundidade do DOM • Não usar estruturas complexas para efeitos simples • Cantos redondos • <em> ou <span> em vez de <b><i>...</i><b>
  • 46. CSS SIMPLES • Regras de CSS complexas ou • Simplificar CSS pouco eficientes • Usar <table> se necessário • Processamento direita para a esquerda • Regras direcionadas #menu .item a { ... } • #especifica div.menos-especifica ‣ Todos os <a> .ainda-menos .ainda-menos div ‣ Todos os <a> dentro de .item div ‣ Todos os .item dentro de #menu
  • 47. JAVASCRIPT SIMPLES • Literais em vez de operador • Seleccionar elementos “new” (var arr = [], obj = {}) • Iterar sobre o DOM • Simplificar tratamento de • Estruturas de dados grandes eventos • Seleccionar elementos por • Evitar frameworks, ID ou tagName e guardar em implementar subconjunto de memória referência se funcionalidades necessárias necessário reutilizar • Juntar manipulações ao DOM • Evitar loops desnecessários • Pedidos AJAX pequenos
  • 50. PERFORMANCE • Fingir! • Mudar estado de links activos
  • 51. PERFORMANCE • Fingir! • Mudar estado de links activos • Indicador de acesso à rede/processamento
  • 52. PERFORMANCE • Fingir! • Mudar estado de links activos • Indicador de acesso à rede/processamento • Especificar background/width/height nas imagens (placeholder)
  • 55. OPTIMIZAÇÃO DE IMAGENS • Evitar alpha-channel
  • 56. OPTIMIZAÇÃO DE IMAGENS • Evitar alpha-channel • Usar PNGs com palette, não RGB
  • 57. OPTIMIZAÇÃO DE IMAGENS • Evitar alpha-channel • Usar PNGs com palette, não RGB • Limpar PNGs: usar pngcrush
  • 58. OPTIMIZAÇÃO DE IMAGENS • Evitar alpha-channel • Usar PNGs com palette, não RGB • Limpar PNGs: usar pngcrush • Usar imagens com tamanho adequado
  • 59. NOKIA WRT (S60 5TH) • Lento com muitos gráficos • Webkit antigo • Bugs, diferenças entre modelos • Updates apagam preferências da app • Sistema de storage simples, apenas para dados pequenos
  • 60. WINDOWS PHONE • IE6 com suporte de PNG • Storage limitado • Sem posicionamento fixo • Lento
  • 61. PALM PRE • Rápido • API muito rica • Webkit relativamente recente • Não são widgets, mas aplicam-se os mesmos conceitos
  • 62. JAVASCRIPT LIBRARIES • LibSAPO.js • Emile.js http://softwarelivre.sapo.pt/ http://github.com/madrobby/emile libsapojs • baseJS • jQuery http://paularmstrongdesigns.com/ http://jquery.com/ projects/basejs/ • Prototype • iUI http://prototypejs.org/ http://code.google.com/p/iui/ • JQTouch • xui http://www.jqtouch.com/ http://xuijs.com/

Notas del editor