Web Mobile: Bonnes Pratiques de Conception et Développement

Date et lieu
14-15 Juin 2011
Dakar, Sénégal
Formateur
Francois Daoust <fd@w3.org>
Présentation
http://www.w3.org/2011/Talks/fd-mobile-training-20110614/

This project is funded by the European Union through the Seventh Framework Programme (FP7/2010-2012) under grant agreement n°269954 - VOICES

Introduction

Qui êtes-vous ?

2 minutes maximum par participant !

Qui suis-je ?

Couverture du livre « Relever le défi du Web mobile » co-écrit avec Dominique Hazaël-Massieux

Le W3C

But de la formation

Contenu de la formation

  1. Un survol rapide du Web mobile
  2. Quels formats et outils pour le Web mobile ?
  3. Les bases de conception pour le Web mobile
  4. CSS pour adapter la présentation
  5. Un peu de JavaScript
  6. Petit, petit, petit
  7. Adaptation de contenu côté serveur

Références en filigrane

Les Bonnes Pratiques pour le développement d’applications Web mobiles

Un survol rapide du Web mobile

A l’origine, le WAP

Un seul Web

Le Web est le même pour tous les types de terminaux

Au final…
Il ne peut en rester qu’un !

Ecueils spécifiques au monde mobile

L’écran

« Vous… vous avez un écran… heu… un écran… très petit »
Cyrano de Bergerac, Acte I scène 4
(version mobile)

En moyenne :

Puissance limitée

Claviers

Dans tous les cas, les saisies sont difficiles sur un terminal mobile.

Pas de souris !

Trois méthodes principales pour interagir avec du contenu :

Bande passante

Bande passante moyenne par type de connexion
Réseau Bande passante moyenne Temps nécessaire
pour télécharger 100Ko
GSM 10 Kb/s 1 mn 20 s
GPRS 50 Kb/s 16 s
EDGE 180 Kb/s 4.5 s
3G 380 Kb/s 2.1 s
3G+ 1 Mb/s 0.8 s
Wi-Fi 30Mb/s 26 ms

NB : 100Ko peuvent très bien coûter $1 !

Latence

Latence aller-retour sur les réseaux mobiles
Réseau Latence Latence pour 10 échanges
GSM 1 s – 2 s 10 s – 20 s
GPRS 600 ms – 700 ms 6 s – 7 s
EDGE 300 ms – 500 ms 3 s – 5 s
3G 100 ms –300 ms 1 s – 3 s
3G+ 50 ms – 150 ms 500 ms – 1 500 ms
Wi-Fi 1 ms – 5 ms 10ms – 50 ms

Un monde très fragmenté

Des formes différentes

Des centaines de téléphones disponibles aux formes différentes
(feature phones, smartphones, flip, barres, écran allongé, etc.)

Quels sont les types de terminaux présents dans la salle ?

Des systèmes d’exploitation différents

Des navigateurs différents

Des navigateurs légers

Les navigateurs légers sont en fait divisés en deux parties, l’une s’exécutant sur le terminal et l’autre sur un serveur

Parts de marché globales (?)

L’évolution de la part de marché globale des navigateurs mobiles de Mai 2010 à Mai 2011 montre la progression rapide d’Android et la domination d’Opera

Parts de marché locales (?)

L’évolution de la part de marché des navigateurs mobiles au Sénégal de Mai 2010 à Mai 2011 fait apparaître de grandes différences avec une première place pour les navigateurs Nokia

Des opportunités à saisir

De nouveaux types d’interactions

La plateforme Web (mobile)

Description des différents champs de la plateforme Web. Chaque champ correspond à un axe d'activité pour la standardisation au W3C

Un terminal très personnel

Un contexte d’utilisation différent

Quels formats pour le Web mobile ?

De HTML 1.0 à HTML5

XHTML ?

XHTML, c’est HTML écrit en respectant les contraintes syntaxiques de XML, par exemple :

HTML5 définit à la fois une sérialisation HTML et une sérialisation XHTML

HTML ou XHTML ?

Les deux !

Les documents polyglottes sont interprétés de la même manière par un parseur HTML et par un parseur XML.

Quelques règles supplémentaires à respecter :

XHTML Basic 1.1 ?

XHTML Basic 1.1 décrit une base de fonctionnalités communes implémentées par tous les navigateurs Web mobiles.

Document Type

XHTML Basic 1.1 DOCTYPE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
  "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
XHTML 1.0 Strict DOCTYPE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
HTML 5 DOCTYPE
<!DOCTYPE html>

Media type

Utiliser text/html pour servir du contenu (X)HTML

Exercice : Un template HTML mobile

Un template HTML mobile

Un template HTML
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="fr" lang="fr">
 <head>
  <meta http-equiv="Content-Type"
        content="text/html; charset=utf-8" />
  <title>Template HTML</title>
 </head>
 <body>
  <h1>Template HTML</h1>
 </body>  
</html>

Nous verrons par la suite comment compléter ce template pour préciser les dimensions de la fenêtre d’affichage.

Utiliser HTML5 sur un mobile ?

Oui, l’important est de comprendre quelles fonctionnalités sont disponibles sur les terminaux mobiles:

Valider du contenu HTML

Le service de validation du W3C (en anglais) :
http://validator.w3.org/

Images bitmap

Les formats pris en charge par les terminaux mobiles :

Images vectorielles

Un exemple de document SVG
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg"
     version="1.2" baseProfile="tiny"
     viewBox="0 0 30 10">
  <desc>Un petit rectangle rouge</desc>
  <rect x="10" y="0" width="10" height="10" fill="red"/>
</svg>

L’exemple précédent s’affiche ainsi :

Un petit rectangle rouge

Cascading Style Sheets (CSS)

A la base :

Quelques règles CSS
body { color: black; background-color: white; }
.code { border-left: thin solid black; }
#menu { float: right; margin-right: 2em; }

Niveaux et profils CSS

Le Profil CSS Mobile

Ne pas compter sur :

Valider du contenu CSS

Le service de validation du W3C (en anglais) :
http://jigsaw.w3.org/css-validator/

Codage de caractères

Le caractère œ est défini dans la table « Latin Extended-A » avec le codage numérique 0153

Représenter un caractère en HTML

  1. Insérer le caractère si celui-ci est défini dans le codage du document :
    c’est toujours possible si le codage est UTF-8 !
  2. Insérer une entité nommée :
    &eacute; pour é
  3. Insérer une entité numérique :
    &#233; pour é

Codage et affichage

Pour afficher un caractère, le navigateur doit :

Un mot sur les autres formats

En règle générale sur les terminaux mobiles :

Quels outils pour le développement ?

Emulateurs

Tests in-situ… à distance

Une trousse à outils

Exercice : Outils

Les bases d’un bon site Web mobile

Rester simple

Maintenir une séparation nette entre les technologies :

Amélioration progressive ?

Il est plus facile de partir de fondations solides et de rajouter quelques extensions que de devoir supprimer certaines fonctionnalités après-coup.

Le Default Delivery Context

Largeur d’écran disponible
120 pixels au minimum
Markup
XHTML Basic 1.1, servi avec le content-type application/xhtml+xml
Codage de caractères
UTF-8
Formats d’image
JPEG, GIF 89a
Poids total maximum d’une page
20 Ko
Couleurs
256 colors au minimum
Prise en charge de CSS
CSS Level 1, avec la règle @media et les types de media.
Script
Pas de prise en charge de scripts côté client

Ajustements acceptables ?

Largeur d’écran disponible
240-300 pixels au minimum
Markup
HTML5 en se basant sur les fonctionnalités de XHTML Basic 1.1
servi avec le content-type text/html
Codage de caractères
UTF-8
Formats d’image
JPEG, GIF 89a, PNG (sans translucidité)
Poids total maximum d’une page
50 Ko
Couleurs
256 colors au minimum
Prise en charge de CSS
CSS Mobile Profile 2.0
Script
Pas de prise en charge de scripts côté client

Fenêtre d’affichage

Unités CSS

Le pixel de référence

Représentation visuelle d’un pixel de référence

Pour un smartphone, si cette définition est bien suivie :

Fenêtre d’affichage en pratique

La directive viewport

Une fenêtre d’affichage de 418 pixels CSS de large
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Forcer la largeur du viewport</title>
  <meta name="viewport" content="width=418,initial-scale=1.0" /> 
 </head>
 <body>[…]</body>
</html>

Revenir au pixel de référence

Revenir au pixel de référence
<meta name="viewport"
           content="width=device-width,initial-scale=1.0" />

Une présentation linéaire

Positionnement des blocs

Important :
Les règles de positionnement peuvent ne pas être prises en charge par certains navigateurs mobiles. Soyez cohérents !

Incohérence dans le positionnement
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Positionnement problématique</title>
  <style type="text/css">
   #content { margin-left: 110px; } 
   #menu { position: absolute; top: 0; left: 0; width: 90px; } 
  </style>
 </head>
<body>
 <div id="content">[…]</div>
 <div id="menu">[…]</div>
</body>
</html>

Optimiser la navigation

Aller droit au but

CSS pour adapter la présentation

CSS Media Types

CSS Media Types
Media type Description
all Pour tous les terminaux, valeur par défaut
screen Pour les écrans d’ordinateurs classiques
handheld Pour les écrans de terminaux mobiles
print Pour l’aperçu avant impression et l’impression
projection Pour la projection de transparents

Jouer avec les CSS Media Types…

Règle CSS @media
@media handheld {
  body { margin: 0; }
  h1 { font-size: 1.3em; }
}
Règle CSS @import
@import url("mobile.css") handheld;
Attribut HTML media
<link rel="stylesheet" href="mobile.css" media="handheld" />

… Un jeu de courte durée !

Inutile d’utiliser handheld au final !

CSS Media Queries

Les requêtes de média CSS étendent les media types avec des critères supplémentaires :

Les propriétés numériques se préfixent avec min- et max-.

width ou device-width ?

width parce que la propriété est indépendante du terminal.

Prise en charge des CSS media queries

Exercice : Adaptation CSS

Une méthode possible

  1. S’assurer que l’unité de référence est le pixel de référence
    (directive viewport)
  2. Penser amélioration progressive
    (le contenu HTML fournit la présentation linéaire)
  3. Cibler les cas voulus avec les requêtes de media

Le code HTML de la méthode

<meta name="viewport"
  content="width=device-width,initial-scale=1.0" />
<link rel="stylesheet" type="text/css"
      href="base.css" />
<link rel="stylesheet" type="text/css"
      href="deuxcol.css"
      media="only all and (min-width: 600px)
             and (max-width: 800px)" />
<link rel="stylesheet" type="text/css"
      href="troiscol.css"
      media="only all and (min-width: 801px)" />

Gérer les exceptions

Gérer les exceptions côté client

Gérer les exceptions côté serveur

Refuser de servir le CSS avancé à un terminal IE Mobile sous Apache
RewriteCond %{HTTP_USER_AGENT} " MSIE " [NC]
RewriteCond %{HTTP_USER_AGENT}
 "Windows Phone| IEMobile" [NC]
RewriteRule ^troiscol.css$ [F,L]

Un peu de JavaScript

Bibliothèques JavaScript

Dans l’ensemble, ces bibliothèques sont lourdes pour les navigateurs mobiles (31Ko pour la version compressée de JQuery par exemple).

Bibliothèques orientées mobile

Quelques bonnes pratiques

Vérifier avant d’utiliser

Prise en charge de l’interface de géolocalisation ?
if (window.navigator.geolocation) {
 // Interface de géolocalisation disponible
 […]
} else {
 // Pas d’interface de géolocalisation disponible
 […]
}

Les scripts à la fin

Les navigateurs bloquent temporairement le chargement d’une page lorsqu’ils rencontrent un script.

Grouper les scripts à la fin du contenu HTML lorsque c’est possible :

<html>
 <head>
  <!-- Pas de script ici --> 
 </head>
 <body>
  <script type="text/javascript" src="scripts.js"></script> 
 </body>
</html>

Manipuler un arbre DOM de manière efficace

JS dans les navigateurs légers

Les navigateurs légers sont en fait divisés en deux parties, l’une s’exécutant sur le terminal et l’autre sur un serveur

Petit, petit, petit

Bande passante

Bande passante moyenne par type de connexion
Réseau Bande passante moyenne Temps nécessaire
pour télécharger 100Ko
GSM 10 Kb/s 1 mn 20 s
GPRS 50 Kb/s 16 s
EDGE 180 Kb/s 4.5 s
3G 380 Kb/s 2.1 s
3G+ 1 Mb/s 0.8 s
Wi-Fi 30Mb/s 26 ms

NB : 100Ko peuvent très bien coûter $1 !

Latence

Latence aller-retour sur les réseaux mobiles
Réseau Latence Latence pour 10 échanges
GSM 1 s – 2 s 10 s – 20 s
GPRS 600 ms – 700 ms 6 s – 7 s
EDGE 300 ms – 500 ms 3 s – 5 s
3G 100 ms –300 ms 1 s – 3 s
3G+ 50 ms – 150 ms 500 ms – 1 500 ms
Wi-Fi 1 ms – 5 ms 10ms – 50 ms

Exercice : Solutions possibles ?

Quelles sont les solutions possibles pour réduire l’impact des ces contraintes sur l’expérience utilisateur ?

Solutions possibles

Exercice : Nombre de requêtes ?

Choisissez un site Web populaire (typiquement celui d’un quotidien), et déterminez le nombre de requêtes envoyées par un navigateur typique pour afficher la page.

Nombre de requêtes

Les « combines »

Autres gains possibles

Exercice : création de sprites

Reproduisez le contenu ci-dessous en combinant les images (décoratives) suivantes dans un sprite.
 

Les environnements d’exécution des applications Web sont hétérogènes et évolutifs. La flexibilité permet de cibler un grand nombre de terminaux à coût réduit.

En matière d'applications mobiles, chaque détail compte et certains points techniques peuvent nettement améliorer l'expérience de l'utilisateur.

Trouver les optimisations possibles

Certains outils mettent en exergue les gains possibles :

Réduire la taille du contenu

But :

Exercice : Gagner en taille ?

Identifiez quelques idées possibles pour réduire la taille du contenu envoyé au navigateur

Amancir le contenu textuel

Réduire les images ?

Exercice : réduire une image

  1. Prenez une image au hazard sur Flickr
  2. Convertissez l’image en 300 pixels de large
  3. Supprimez toutes les meta-données de l’image obtenue en 2. avec jhead
  4. Comparez les tailles des images obtenues en 2. et 3.

Maigrir sans cookies

Tirer partie du cache

Différents types de caches :

Fonctionnement d’un cache

Il suffit de répondre à deux questions :

C.f. « Un tutoriel de la mise en cache » de Mark Nottingham (en français).

Date d’expiration d’un document

Spécifiée dans deux en-têtes HTTP, souvent utilisés ensemble :

Quelle durée de validité utiliser ?

Valeurs de Cache-Control recommandées
Type de document Durée Directive Cache-Control
Static HTML page 1 semaine Cache-Control: max-age=6004800
Dynamic HTML page 1 heure Cache-Control: max-age=3600
« Real-time » HTML page 2 minutes Cache-Control: max-age=120
CSS, image, script 1 mois Cache-Control: max-age=2592000

Version du document

Spécifiée dans deux autres en-têtes HTTP, souvent utilisés ensemble :

La version peut aussi s’inclure dans le nom du document :

<script type="text/javascript" src="script-v1.7.js">
</script>

Préciser les directives côté serveur

Par exemple, sous Apache :

# Enable the mod_expires module
ExpiresActive On 
 
# Set expiration date per document type
ExpiresByType text/html "access plus 1 week"
ExpiresByType text/css "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"

Que mettre en cache ?

TOUT ce qui peut l’être
(HTML, CSS, images, scripts, contenu AJAX, etc.)

Et la compression ?

Compression sous Apache

Sous réserve d’activer le module mod_deflate :

Avec une extension dédiée
AddType .htmlc text/html
AddEncoding gzip .htmlc

Adaptation de contenu côté serveur

Pourquoi adapter côté serveur ?

Comment adapter côté serveur ?

En-têtes HTTP

Adaptation basée sur Accept-*

Sous Apache :

Options +MultiViews

En supposant la requête suivante :

GET /img HTTP/1.1
Host: example.com
Accept: text/html,image/png,image/jpeg;q=0.8
[…]

Le serveur cherche img.png, puis img.jpg dans le répertoire demandé.

Exercice : User-Agent ?

Mettons en commun les User-Agent renvoyés par les navigateurs présents dans la salle. Commentaires ?

La jungle des User-Agent

Les chaines User-Agent:

Il y a des dizaines de milliers de possibilités.

Adaptation simple et limitée

RewriteEngine on
 
RewriteCond %{HTTP_USER_AGENT} "android" [NC]
RewriteRule ^/$ /index-android.html [L]
 
RewriteRule ^/$ /index.html [L]
 
Header merge vary "User-Agent"

Adaptation plus générique

Les bases de decription de terminaux fournissent ce genre d’information :

Exercice : Adaptation avec WURFL

En utilisant WURFL, préparer une page PHP qui affiche « Bonjour utilisateur mobile ! » lorsque la requête provient d’un terminal mobile et « Bonjour utilisateur statique ! » lorsque la requête provient d’un ordinateur de bureau.

Avant de finir, quelques mots sur…

Cours sur le Web mobile

http://www.w3.org/Mobile/training/
(prochaine session en Septembre)

Mobile Training Labs

But : partager de l’expertise sur des technologies mobiles utiles au Sénégal, et qui permettront à des entrepreneurs locaux de créer de nouveaux services, et de développer du contenu et des applications locales à même de leur donner des sources de revenu.

Conclusion

Merci !

Formateur
Francois Daoust <fd@w3.org>
Présentation
http://www.w3.org/2011/Talks/fd-mobile-training-20110614/
Questions
???

This project is funded by the European Union through the Seventh Framework Programme (FP7/2010-2012) under grant agreement n°269954 - VOICES