mobile-best-practice/README.md

151 lines
9.9 KiB
Markdown
Raw Normal View History

2024-02-02 15:13:15 +00:00
# Bonne pratiques d'écoconception appliqué au mobile
## Contexte
L'objectif de ce document est de fournir un référentiel d'écoconception adapté au mobile. L'application des bonnes pratiques ci-dessous ont toutes un but commun : prolonger la durée de vie des terminaux des utilisateurs et utilisatrices.
## Les besoins
Étant donné les évolutions continues du mobile, ce référentiel a besoin de régulièrement être mis à jour.
Toute proposition ou idée d'amélioration, de modification ou de suppression est bienvenue.
## Comment contribuer ?
N'hésitez pas à lire [le guide des contributeurs](CONTRIBUTING.md).
## La liste des Bonnes Pratiques
Produit :
* [Éliminer les fonctionnalités non essentielles](chapters/MBP_001_fr.md)
* [Quantifier précisément le besoin](chapters/MBP_002_fr.md)
UI/UX :
* [Optimiser le parcours utilisateur](chapters/MBP_003_fr.md)
* [Préférer la saisie assistée à l'autocomplétion](chapters/MBP_004_fr.md)
* [Favoriser un design simple, épuré, adapté au mobile](/chapters/MBP_005_fr.md)
* [Optimiser la récupération en fonction du cycle de vie de l'application](chapters/MBP_006_fr.md)
* [Libérer la mémoire des traitements consommateurs en fonction de l'état de l'application](chapters/MBP_006bis_fr.md)
2024-02-02 15:13:15 +00:00
* [Stocker localement les données de configuration non liées aux données du serveur](chapters/MBP_007_fr.md) // TODO à discuter car côté mobile, beaucoup des données statiques sont déjà sur l'appareil.
2024-02-05 15:08:18 +00:00
* [Déployer un Android App Bundle (AAB) plutôt qu'un APK](chapters/MBP_008_fr.md) // TODO a reformuler
2024-02-02 15:13:15 +00:00
* [Supprimer les ressources non utilisées](chapters/MBP_009_fr.md)
2024-02-05 15:08:18 +00:00
* [Minifier le code](chapters/MBP_010_fr.md)
* [Ne pas redimensionner les images coté application](chapters/MBP_011_fr.md)
* [Éviter d'utiliser des images matricielles](chapters/MBP_012_fr.md)
* [Utiliser le chargement paresseux](chapters/MBP_013_fr.md)
* [Ne pas recharger inutilement l'ensemble du contenu d'une liste si seulement une partie a changé](chapters/MBP_014_fr.md)
* [Optimiser le chargement paresseux d'un écran complexe comportant des listes imbriquées](chapters/MBP_015_fr.md)
* [Éviter les animations](chapters/MBP_016_fr.md)
2024-02-02 15:13:15 +00:00
// TODO https://developer.android.com/topic/performance/reduce-apk-size
2024-02-05 15:08:18 +00:00
// TODO
// MAIN/IO thread ?
2024-02-02 15:13:15 +00:00
// Repository (stratégie offline)
2024-02-05 15:08:18 +00:00
// Eviter image non vectoriel (/chapters/BP_023_fr.md)
// Etudier si l'usage de style/theme plutôt que paramètre individuel est plus efficace (BP_024_fr BP_025_fr)
// Utiliser les paramètres de style abrégés // [Utiliser les notations CSS abrégées](/chapters/BP_026_fr.md)
// Utiliser glide ou équivalent pour mettre en cache les images et éviter de les recharger
// Notifications
// ABI ??
// Feature play store
// Base de données: ne pas garder en base de données des données plus utilisées
// Si fonctionnalité de mise en offline de fichier volumineux (ex media), associer une durée de vie.
// Liste performance (notifyDataSetChange, id in lazy list to avoir rendering everything. Type in lazy list)
https://developer.android.com/topic/performance/vitals/render#recyclerview_notifydatasetchanged
// Reduce cost of inflation (ex ConstraintLayout instead of nested LinearLayout) https://developer.android.com/topic/performance/vitals/render#recyclerview_too_much_inflation_or_create_is_taking_too_long If your view types look good, look at reducing the cost of your inflation. Reducing unnecessary container and structural views can help. Consider building itemViews with ConstraintLayout, which can help reduce structural views.
2024-02-02 15:13:15 +00:00
// TODO pas encore fait la suite
* [N'utilisez que les portions indispensables des librairies JavaScript et frameworks CSS](/chapters/BP_040_fr.md)
* [Ne pas faire de modification du DOM lorsquon le traverse](/chapters/BP_041_fr.md)
* [Rendre les éléments du DOM invisibles lors de leur modification](/chapters/BP_042_fr.md)
* [Réduire au maximum le repaint (appearence) et le reflow (layout)](/chapters/BP_043_fr.md)
* [Utiliser la délégation d'évènements](/chapters/BP_044_fr.md)
* [Modifier plusieurs propriétés CSS en 1 seule fois](/chapters/BP_045_fr.md)
* [Valider votre code avec un Linter](/chapters/BP_046_fr.md)
* [Mettre en cache les objets souvent accédés en JavaScript](/chapters/BP_049_fr.md)
* [Réduire les accès au DOM via JavaScript](/chapters/BP_054_fr.md)
* [Utiliser tous les niveaux de cache du CMS](/chapters/BP_057_fr.md)
* [Optimiser et générer les médias avant importation sur un CMS](/chapters/BP_058_fr.md)
* [Encoder les sons en dehors du CMS](/chapters/BP_060_fr.md)
* [Mettre en cache les données calculées souvent utilisées](/chapters/BP_064_fr.md)
* [Supprimer tous les warning et toutes les notices](/chapters/BP_070_fr.md)
* [Éviter d'effectuer des requêtes SQL à lintérieur dune boucle](/chapters/BP_072_fr.md)
* [Ne se connecter à une base de données que si nécessaire](/chapters/BP_073_fr.md)
* [Optimiser les requêtes aux bases de données](/chapters/BP_075_fr.md)
* [Éviter le transfert d'une grande quantité de données pour réaliser un traitement](/chapters/BP_076_fr.md)
* [Minifier les fichiers CSS, JavaScript, HTML et SVG](/chapters/BP_077_fr.md)
* [Compresser les fichiers CSS, JavaScript, HTML et SVG](/chapters/BP_078_fr.md)
* [Combiner les fichiers CSS et JavaScript](/chapters/BP_079_fr.md)
* [Optimiser les images](/chapters/BP_080_fr.md)
* [Optimiser la taille des cookies](/chapters/BP_082_fr.md)
* [Favoriser HSTS Preload list aux redirections 301](/chapters/BP_084_fr.md)
* [Mettre en place un plan de fin de vie du site](/chapters/BP_085_fr.md)
* [Choisir un hébergeur "éco-responsable"](/chapters/BP_086_fr.md)
* [Privilégier un fournisseur d'électricité écoresponsable](/chapters/BP_087_fr.md)
* [Adapter la qualité de service et le niveau de disponibilité](/chapters/BP_088_fr.md)
* [Utiliser des serveurs virtualisés](/chapters/BP_089_fr.md)
* [Optimiser l'efficacité énergétique des serveurs](/chapters/BP_090_fr.md)
* [Installer le minimum requis sur le serveur](/chapters/BP_091_fr.md)
* [Mettre les caches entièrement en RAM (opcode et kvs)](/chapters/BP_092_fr.md)
* [Stocker les données dans le cloud](/chapters/BP_093_fr.md)
* [Héberger les ressources (CSS/JS) sur un domaine sans cookie](/chapters/BP_094_fr.md)
* [Éviter les redirections](/chapters/BP_095_fr.md)
* [Afficher des pages d'erreur statiques](/chapters/BP_096_fr.md)
* [Utiliser un serveur asynchrone](/chapters/BP_097_fr.md)
* [Utiliser un CDN](/chapters/BP_098_fr.md)
* [Utiliser un cache HTTP](/chapters/BP_099_fr.md)
* [Ajouter des entêtes Expires ou Cache-Control](/chapters/BP_101_fr.md)
* [Mettre en cache les réponses Ajax](/chapters/BP_102_fr.md)
* [Réduire au nécessaire les logs des serveurs](/chapters/BP_103_fr.md)
* [Désactiver le DNS lookup dApache](/chapters/BP_104_fr.md)
* [Apache Vhost : désactiver le AllowOverride](/chapters/BP_105_fr.md)
* [Désactiver les logs binaires](/chapters/BP_106_fr.md)
* [Compresser les documents](/chapters/BP_107_fr.md)
* [Optimiser les PDF](/chapters/BP_108_fr.md)
* [Limiter les e-mails lourds et redondants](/chapters/BP_109_fr.md)
* [N'utiliser que des fichiers double opt-in](/chapters/BP_110_fr.md)
* [Limiter la taille des e-mails envoyés](/chapters/BP_111_fr.md)
* [Adapter les sons aux contextes d'écoute](/chapters/BP_112_fr.md)
* [Adapter les textes au web](/chapters/BP_113_fr.md)
* [Adapter les vidéos aux contextes de visualisation](/chapters/BP_114_fr.md)
* [Limiter les outils d'analytics et les données collectées](/chapters/BP_4001_fr.md)
* [Limiter l'utilisation des GIFs animés](/chapters/BP_4002_fr.md)
* [Éviter la lecture et le chargement automatique des vidéos et des sons](/chapters/BP_4003_fr.md)
* [Utiliser les compartiments CSS](/chapters/BP_4004_fr.md)
* [Fournir une alternative textuelle aux contenus multimédias](/chapters/BP_4005_fr.md)
* [Privilégier HTTP/2 à HTTP/1](/chapters/BP_4006_fr.md)
* [Économiser de la bande passante grace à un ServiceWorker](/chapters/BP_4007_fr.md)
* [Mettre en place un sitemap efficient](/chapters/BP_4008_fr.md)
* [Assurer la compatibilité avec les plus anciens appareils et logiciels du parc](/chapters/BP_4009_fr.md)
* [Réduire le volume de données stockées au strict nécessaire](/chapters/BP_4011_fr.md)
* [Mettre en place une politique d'expiration et suppression des données](/chapters/BP_4012_fr.md)
* [Limiter le recours aux canvas](/chapters/BP_4013_fr.md)
* [S'assurer que les parcours utilisateurs permettent de réaliser leur action prévue](/chapters/BP_4014_fr.md)
* [Avoir un titre de page et une metadescription pertinents avec le contenu de la page](/chapters/BP_4015_fr.md)
* [Utiliser la version la plus récente du langage](/chapters/BP_4016_fr.md)
* [Ne charger des données/du code que lorsqu'elles sont/il est nécessaire](/chapters/BP_4017_fr.md)
* [Éliminer les fonctionnalités non utilisées](/chapters/BP_4018_fr.md)
* [Préférer une PWA à une application mobile native similaire au site web](/chapters/BP_4019_fr.md)
* [Éviter les temps de blocages par des traitements JavaScript trop longs](/chapters/BP_4020_fr.md)
* [Mettre en place une architecture élastique](/chapters/BP_4021_fr.md)
* [Limiter le nombre d'appels aux API HTTP](/chapters/BP_4022_fr.md)
* [Limiter le recours aux carrousels](/chapters/BP_4030_fr.md)
* [Avoir une stratégie de fin de vie des contenus](/chapters/BP_4031_fr.md)
* [Mettre en place un "Circuit breaker"](/chapters/BP_4032_fr.md)
* [Favoriser le "Request collapsing"](/chapters/BP_4033_fr.md)
* [Sappuyer sur les services managés](/chapters/BP_4034_fr.md)
* [Préférer la pagination au défilement infini](/chapters/BP_4035_fr.md)
* [Entretenir son site régulièrement](/chapters/BP_4036_fr.md)
* [Limiter le nombre d'extensions dans un CMS](/chapters/BP_4037_fr.md)
* [Sécuriser l'accès à l'administration](/chapters/BP_4038_fr.md)
* [Ne pas afficher les documents à l'intérieur des pages](/chapters/BP_4039_fr.md)
## Licence
Les sources et contenus de ce projet sont [protégés](LICENCE.md)