O desenvolvimento de páginas e aplicativos da Web para dispositivos móveis apresenta desafios diferentes em comparação com o desenvolvimento de páginas da Web para navegadores típicos de computadores. As práticas a seguir podem ajudar você a fornecer o aplicativo da Web mais eficaz para Android e outros dispositivos móveis.
- Redirecione dispositivos móveis para uma versão para dispositivos móveis dedicada do seu site. Há várias maneiras de fazer isso usando redirecionamentos do lado do servidor. Um método comum é "farejar" a string do user agent fornecida pelo navegador da Web. Para determinar se uma versão para dispositivos móveis do seu site precisa ser exibida ou não, procure a string "mobile" no user agent.
- Use HTML5
para dispositivos móveis. O HTML5 é a linguagem de marcação mais comum usada em sites para dispositivos móveis.
Esse padrão incentiva o desenvolvimento voltado para dispositivos móveis para garantir que os sites funcionem em vários dispositivos. Ao contrário de linguagens da Web anteriores, o HTML5 usa declarações
<DOCTYPE>echarsetmais simples:<!DOCTYPE html> ... <meta charset="UTF-8">
- Use os metadados da janela de visualização para redimensionar corretamente a página da Web. No documento
<head>, forneça metadados que especifiquem como você quer que a janela de visualização do navegador renderize a página da Web. Por exemplo, os metadados da janela de visualização podem especificar a altura e a largura da janela de visualização do navegador, a escala inicial da página e a densidade da tela desejada.O exemplo a seguir mostra como definir metadados da janela de visualização:
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
Para saber mais sobre como usar os metadados da janela de visualização para dispositivos com tecnologia Android, leia Compatibilidade com telas diferentes em apps da Web.
- Use um layout linear vertical. Evite a necessidade de rolar para a direita e para a esquerda na navegação pela página. A rolagem para cima e para baixo é mais fácil para o usuário e deixa sua página mais simples.
- Defina a altura e a largura do layout como
match_parent. Definir a altura e a largura do objetoWebViewcomomatch_parentgarante que as visualizações do seu app sejam dimensionadas corretamente. Não recomendamos definir a altura comowrap_contentporque isso resulta em dimensionamento incorreto. Da mesma forma, definir a largura do layout comowrap_contentnão é compatível e faz com que oWebViewuse a largura do pai. Devido a esse comportamento, também é importante verificar se nenhum dos objetos de layout pais do objetoWebViewtem a altura e a largura definidas comowrap_content. - Evite várias solicitações de arquivos. Como dispositivos móveis normalmente têm uma velocidade de conexão mais lenta do que a de computadores desktop, faça com que o carregamento de página seja o mais rápido possível. Uma forma de acelerar o processo é evitar o carregamento de arquivos extras, como folhas de estilo e arquivos de script, no
<head>. Além disso, considere fazer uma análise para dispositivos móveis com o PageSpeed Insights do Google para receber sugestões detalhadas de otimização específicas para seu app. - Desative os downloads automáticos de favicon se eles não forem necessários.
Por padrão, o
WebViewbaixa automaticamente um favicon sempre que um site é visitado durante a navegação. OWebViewmantém duas cópias de cada favicon baixado (uma em Java e outra em memória nativa). Portanto, desativar os downloads de favicon economiza memória (aproximadamente 8 KB por instância deWebView) e reduz o consumo de largura de banda. Se o app não usar nem mostrar favicons, useWebSettingsCompat.setDownloadFaviconsEnabled()da biblioteca WebKit do Jetpack para desativar os downloads automáticos:Kotlin
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.settings, false) }
Java
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.getSettings(), false); }
- Gerencie o estado salvo e evite limites de transação. Se você salvar o estado do
WebViewdurante eventos do ciclo de vida usandosaveState(Bundle), aplique limites de tamanho de payload usandoWebViewCompat.saveState()para evitar exceder o limite de 1 MB dosavedInstanceStatedo Android. Para mais informações, consulte Gerenciar o estado do WebView de maneira eficiente. - Otimize as conexões de rede e o carregamento de páginas com APIs de carregamento especulativo.
Para reduzir a latência de navegação, use as APIs do Jetpack Webkit para preparar conexões de rede e conteúdo com antecedência.
Chame
Profile.addQuicHintspara pré-preencher o suporte a HTTP/3 sobre QUIC para que a WebView possa usar o QUIC imediatamente na primeira conexão e useProfile.preconnectpara pré-aquecer os sockets de rede. Quando os URLs de destino são conhecidos ou prováveis, useProfile.prefetchUrlAsyncouWebViewCompat.prerenderUrlAsyncpara buscar ou renderizar páginas em segundo plano. Para mais informações, leia Carregamento especulativo no WebView. - Desative os downloads automáticos de favicon se eles não forem necessários.
Por padrão, o
WebViewbaixa automaticamente um favicon sempre que um site é visitado durante a navegação. OWebViewmantém duas cópias de cada favicon baixado (uma em Java e outra em memória nativa). Portanto, desativar os downloads de favicon economiza memória (aproximadamente 8 KB por instância deWebView) e reduz o consumo de largura de banda. Se o app não usar nem mostrar favicons, useWebSettingsCompat.setDownloadFaviconsEnabled()da biblioteca WebKit do Jetpack para desativar os downloads automáticos:Kotlin
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.settings, false) }
Java
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.getSettings(), false); }
- Gerencie o estado salvo e evite limites de transação. Se você salvar o estado do
WebViewdurante eventos do ciclo de vida usandosaveState(Bundle), aplique limites de tamanho de payload usandoWebViewCompat.saveState()para evitar exceder o limite de 1 MB dosavedInstanceStatedo Android. Para mais informações, consulte Gerenciar o estado do WebView de maneira eficiente.
Outros recursos
- Carregamento especulativo no WebView
- Gerenciar o estado do WebView com eficiência
- IU Pixel-Perfect no modo WebView (link em inglês)
- Aprenda sobre design responsivo
- Imagens com DPI alto para densidades de pixels variáveis (link em inglês)
- Práticas recomendadas para a Web móvel
- Torne a Web mais rápida