Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Pourquoi, quand et comment optimiser une application ?

Par Thoutmosis, le 13 janvier 2010

Cet article est la première partie d'un dossier consacré à l'optimisation. Nous allons y présenter les premières questions à se poser pour aborder le sujet.

Pourquoi ?

L'optimisation est un chemin long et douloureux, tout d'abord parcqu'il nous oblige à revoir quelque chose de fini et fonctionnel ( ben oui, optimiser un code qui bug c'est … du debug pas de l'optimisation :) ). Dans un second temps l'optimisation nous oblige à revoir plus ou moins en profondeur l'organisation du code, ce qui n'est pas toujours évident lorsqu'on a pondu un truc vite fait mal fait ( si si, il y a des fois ou l'on est obligé ).

D'ou la question légitime:

pourquoi devrais-je optimiser mon application ?

A cette question il peut y avoir une multitude de réponses mais une seule reste valable à mes yeux:

Parcequ'elle n'est pas assez fluide ou qu'elle prends trop de ressources !

En effet, rien de pire pour l'utilisateur ( et le développeur ) que quelque chose qui fonctionne à la vitesse d'un escargot au galop ( yyyyiiihaaa !! ) ou qui prends trop de RAM. Il convient donc d'optimiser ou de repenser totalement le bout de code coupable voire même ( et dans de rares cas ), l'application entière.

Quand ?

La règle d'or la voici :

On optimise une application ou un bout de code uniquement quand cela est nécessaire !!

L'optimisation ne doit pas ressembler à une refonte de la totalité du projet. Il faut d'abord isoler l'action qui prends trop de ressources et mesurer sa dépendance par rapport à l'architecture globale du projet. Voyez votre projet comme une voiture, vous ne la jetteriez pas sous prétexte que les freins sont un peu usés n'est-ce pas ? De la même manière vous n'iriez pas changer sa courroie de distribution juste “comme ça”. Un programme c'est exactement la même chose, on répare ce qui doit l'être, on reconstruit ce qui est cassé uniquement. Si vous voulez quelque chose de tout beau tout neuf, achetez une autre voiture.

Comment ?

Le comment est une question assez vaste qui dépends de beaucoup de paramètres notamment:

  • La complexité de l'application.
  • Le temps qu'on peut accorder à l'optimisation.
  • Le niveau du développeur.

Ces trois facteurs sont ( à mon sens ) les plus importants. En effet, un bon développeur pourra très bien se perdre dans une application très complexe tout comme un développeur plus faible pourra se perdre dans un code assez simple. Ensuite il y a le facteur temps, celui-là c'est le plus vicieux car même un dieu vivant ne peut pas recoder tout un site en un jour ( pourtant ça empêche pas les clients de demander ^^ ).

Ce qui amène à la question suivante :

Quelles optimisations ai-je le temps de faire et est-ce que j'aurai le niveau pour les faire ?

Pour vous aider à répondre à cette question, sachez qu'il existe plusieurs types d'optimisations mais qu'elles peuvent toutes être regroupées dans l'un des deux groupes suivants :

  • Les optimisations architecturales : ce sont en général les optimisations les plus puissantes et les plus longues à mettre en place. Prenons comme exemple un programmeur lambda qui, pour trier des éléments dans un tableau, va effectuer au minimum 500 opérations. Un programmeur plus expérimenté repasse derrière lui et note que quelque chose ne vas pas dans le raisonnement du programmeur lambda, il entreprends alors de repenser totalement la fonction de tri. Au terme de son travail, il arrive à un minimum de 250 opérations soit moitié moins que le programmeur lambda, il a donc ( à priori ) mieux pensé son architecture que l'autre programmeur. Du fait du caractère complexe de ce genre d'optimisation, il paraît difficle de créer un exemple potable qui ne fasses pas l'objet d'un dossier complet, nous n'étudierons donc pas ce genre d'optimisation dans ce dossier.
  • Les optimisations de code : ce sont des optimisations qui ont un champ d'action beaucoup plus local dirons-nous, elles sont en général plus rapides et plus simples à mettre en place. Ce genre d'optimisation n'est cependant pas à prendre à la légère, sur une action précise on peut obtenir un gain de performance en moyenne de 300% . En général cela consiste à itérer plus intelligemment dans un tableau, choisir les bons types de données, utiliser des opérateurs binaires, simplifier ou tout simplement enlever des calculs inutiles, la liste est longue et vous pouvez vous-même l'étendre.

Conclusion:

L'optimisation passe par de nombreuses étapes avant le code, notamment celle très importante de la réflexion. Ai-je besoin d'optimiser mon application ? Si oui, de combien de temps disposé-je ? Comment optimiser ? Toutes ces étapes peuvent paraître fastidieuses mais sont néanmoins nécessaires.



Retour au sommaire du dossier
Page 1 du dossier » Pourquoi, quand et comment optimiser une application ?
Page 2 du dossier » système binaire et représentation des nombres
Page 3 du dossier » Les opérateurs binaires
Page 4 du dossier » une_classe_pour_realiser_des_benchmarks