Obtenir le meilleur

Publié le par Peck

La suite sur http://linux-attitude.fr/post/Obtenir-le-meilleur

Niveau
:


Prototypage
L'optimisation est un processus qui cherche à accélérer le fonctionnement de ce que vous avez développé.
Cette amélioreation intervient à plusieurs étapes. La première se trouve tôt dans le développement (en gros après ou pendant le prototype) et est le choix des algorithmes à utiliser. C'est eux qui détermineront si votre application tournera en O(n) ou en O(2^n)

Note : O(n) veux dire que la mesure du temps d'exécution de votre application (ou de son occupation en RAM selon le problème considéré) sera de la forme a*n avec a constante et n le nombre de données à traiter (pour n grand). O(n^2) -> a*n^2 + b*n + c . On considère que pour n suffisament grand les termes après le premier sont non significatifs. Mais il ne faut pas oublier que pour n petit ils le deviennent ...


Développement
Ensuite vous développerez en respectant un certain nombre de standards ou de normes. Vous vous retrouverez alors avec les recommendations de milliers de consultants et surtout de votre chef. Et attention, ce n'est qu'après ce développement qu'interviendra l'optimisation. Ce qui veut dire que si votre chef vous demande de dérouler les boucles, soit il sait que c'est un cas particulier qui l'exigera (très rare) soit vous lui dites qu'il peut aller ennuyer un autre collègue.

Profiling
En pratique, toute optimisation doit être précédée d'un profiling. L'optimisation sans profiling, c'est la loi sans justice, la répression sans prévention ... ça ne sert à rien si ce n'est faire chier sans aucune raison autre que vos idées reçues. Pour preuve une expérience très simple. Une application développée, demandez à un développeur dans quelle fonction il pense que le plus de temps est dépensé. Dans la majorité des cas, un profiling prouvera qu'il a tort (sauf s'il a quelques années de profiling derrière lui).


La plupart des langages disposent maintenant d'outils de profiling adapté. A vous de le trouver (notez que je ne l'ai pas encore trouvé pour javascript).
Un certain nombre de ces outils permet de fournir des données au format Kcachegrind (wincachegrind sous windows). Kcachegrind est un outil formidable qui permet de suivre l'arbre d'appel des fonctions, d'avoir les temps d'exécution de chaque fonction de façon très visuelle. Vous verrez tout de suite où agir.

Et ce n'est qu'après avoir vu de vos yeux dans kcachegrind quelle partie du code prend du temps ou quelle fonction est appelée fréquement, que vous pourrez vous atteler à l'optimisation.

Optimisation
Et cette fois, c'est parti, optimisation à fond, la règle est qu'il n'y a plus de règle, tout est bon pour optimiser. Casser des standards de codage, dérouler des boucles, copier/coller des fonctions ...
Mais tout ceci n'est valable que parce que cela se fait sous le contrôle d'un profiling qui vous indique que ce que vous faites sert vraiment. Attention, à partir du moment où l'optimisation change ou égratigne des bonne pratiques de codage, elle doit être localisée et commentée.


Je sais tout ceci n'est que du blabla, pas de cas concret, mais ça permet de mettre un peu les idées en place, éviter quelques erreurs.
À bientôt pour de nouvelles aventures !

Publié dans développement

Commenter cet article