Le Jeudi 1 Septembre 2005 15:01, Charles-Henri d'Adhémar a écrit :
> Mais je refute les arguements de performances tant qu'il n'y aura pas eu de
> tests a l'appui
J'ai fait un petit test en écrivant un script ruby print.rb :
«
print ARGV[0],"\n"
»
Rien de bien compliqué : il affiche le premier argument passé au script, suivi
d'un retour à la ligne.
J'appelle ensuite print.rb pour écrire 500 fois "Hello world" à l'aide d'un
script bash test.sh :
«
#!/bin/bash
for i in $( seq 1 500 ); do
ruby print.rb "Hello world!"
done
»
je lance test.sh plusieurs fois en mesurant le temps d'exécution :
time -p ./test.sh
...
real 2.14
user 1.55
sys 0.52
Le temps d'exécution le plus court que j'ai obtenu est de 2,14 secondes.
Je fais un autre test en utilisant une commande externe à Bash codée en C,
« /bin/echo », fournie avec les coreutils. Le script bash ne change pas
beaucoup :
«
#!/bin/bash
for i in $( seq 1 500 ); do
/bin/echo "Hello world!\n"
done
»
je lance test.sh plusieurs fois en mesurant le temps d'exécution :
time -p ./test.sh
...
real 0.34
user 0.11
sys 0.19
Le temps d'exécution le plus court que j'ai obtenu est de 0,34 secondes.
Utiliser une commande compilée à partir d'un code C au lieu d'un script Ruby
interprêté s'avère être plus de 6 fois plus rapide pour cette tâche.
Même test en utilisant la commande echo intégré au Bash (builtin) :
«
#!/bin/bash
for i in $( seq 1 500 ); do
echo "Hello world!\n"
done
»
je lance test.sh plusieurs fois en mesurant le temps d'exécution :
time -p ./test.sh
...
real 0.02
user 0.00
sys 0.00
Le temps d'exécution le plus court que j'ai obtenu est de 0,02 secondes.
Utiliser la commande echo intégrée au bash se révèle être plus de 100 fois
plus rapide que le script Ruby, et 17 fois plus rapide que la commande
externe en C.
Voilà :-)
++
Gontran