Perl vs. PHP
Les fichiers de benches DIML sont générés dans le répertoire courant des ressources DIML. Il est donc nécessaire d'autoriser l'écriture par le serveur dans ces répertoires. Cette contrainte pouvant s'avérer risquée en termes de sécurité, il est important de ne pratiquer des mesures que sur un serveur de développement, ou pendant une phase de test d'une implémentation Web. On désactivera cette option sur des serveurs de production.
La mesure des benches s'appuie sur le module Perl Time::HiRes, donnant accès à la mesure de l'horloge haute résolution (gettimeofday()). Ce module est disponible par PPM (implémentation ActiveState) ou CPAN. Tous les temps d'exécution sont rendus au centième de seconde.
La mesure des benches s'appuie sur la disponibilité de la fonction gettimeofday(), et est dépendante également du système d'exploitation sous-jacent.
Les fichiers de benches du moteur ESSI expriment différents temps de calcul au cours du processus de construction de la page DIML. Ces fichiers sont produits si l'option générale TIMEBENCH est activée. Un fichier ".bnc" 'respectivement .pbnc pour la version Php) est généré comme suit :
ESSI Activation Benchmarking
ESSI Document : f:\wwwroot\diml\index_fr.dim
Total activation time : 0.44 secs
------------------------------
Phase 1 (init) : 0.05 secs
Phase 2 (resources) : 0 secs
Phase 3 (template extraction) : 0 secs
Phase 4 (conditional checks) : 0 secs
Phase 5 (precompilation of statics) : 0 secs
Phase 6 (main scan) : 0.39 secs
Phase 7 (header reconstruct) : 0 secs
------------------------------
Feeder Invocation Cpu Time (last Invoke statement within Phase 6)
FEEDER 0 : 0.05 secs
FEEDER 1 : 0 secs
- Phase 1
La phase 1 comprend la phase d'ouverture des fichiers annexes (log), ainsi que le chargement des modules d'extensions.
- Phase 2
La phase 2 correspond à la compilation des variables d'environnement et des arrivées CGI. Elle est en général non significative pour une méthode GET.
- Phase 3
La phase 3 correspond à la compilation des templates détectés dans le document.
- Phase 4
La phase 3 correspond à la vérification des structures conditionnelles.
- Phase 5
La phase 5 correspond à la précompilation des templates statiques.
- Phase 6
La phase 6 correspond à la compilation de la séquence principale. Elle mesure également les périodes d'exécution des scripts "utilisateur".
- Phase 7
La phase 7 correspond à la finalisation du document, avec reconstruction des en-têtes.
La suite du fichier donne successivement les temps passés pour chacune des invocations externes.
Contrairement à toute attente, la version Perl du DIML exécutée par une implémentation Perl ActiveState externe à Apache, est aux alentours de 4 fois plus rapide que la version PHP4, basée sur le même code, comme l'indiquent les deux benches suivants* :
Version Perl
|
ESSI Activation Benchmarking
ESSI Document : f:\wwwroot\diml\support\dimltest_short.dim
Total activation time : 0.16 secs
------------------------------
Phase 1 (init) : 0.05 secs
Phase 2 (resources) : 0 secs
Phase 3 (template extraction) : 0 secs
Phase 4 (conditional checks) : 0.06 secs
Phase 5 (precompilation of statics) : 0 secs
Phase 6 (main scan) : 0.05 secs
Phase 7 (header reconstruct) : 0 secs
------------------------------
Feeder Invocation Cpu Time (last Invoke statement within Phase 6)
FEEDER 0 : 0 secs
|
Version Php4
|
ESSI Activation Benchmarking
ESSI Document : f:/wwwroot/diml/support/dimltest_short.pdim
Total elapsed time : 0.68 secs
-------------------------------
Phase 1 (init) : 0.05 secs
Phase 2 (resources) : 0.01 secs
Phase 3 (template extraction) : 0.00 secs
Phase 4 (conditional checks) : 0.02 secs
Phase 5 (precompilation of statics) : 0.00 secs
Phase 6 (main scan) : 0.59 secs
Phase 7 (header reconstruct) : 0.00 secs
-------------------------------
Feeder Invocation Time (within phase 6)
FEEDER 0 : 0.01 secs
|
(*) Conditions d'exécution : Processeur - Pentium 1.2 GHz / 128 M RAM, OS : Windows Millenium
Là encore, pour les deux motorisations externes PHP4 et Perl sous DBI::DBD, la différence en vitesse pure est sans appel. L'implémentation Perl est encore beaucoup plus rapide que sa version Php, bien que se basant strictement sur le même découpage algorithmique.
Le fichier de test effectue une salve de 16 extractions d'une table de 10 x 10, contenant 1 colonne de clefs et 9 colonnes de textes contenant des textes de 28 caractères.
Version Perl
|
ESSI Activation Benchmarking
ESSI Document : f:\wwwroot\diml\support\sqltest_short.dim
Total activation time : 0.33 secs
------------------------------
Phase 1 (init) : 0.06 secs
Phase 2 (resources) : 0 secs
Phase 3 (template extraction) : 0 secs
Phase 4 (conditional checks) : 0 secs
Phase 5 (precompilation of statics) : 0 secs
Phase 6 (main scan) : 0.27 secs
Phase 7 (header reconstruct) : 0 secs
------------------------------
Feeder Invocation Cpu Time (Invoke statement within Phase 6)
|
Version Php4
|
ESSI Activation Benchmarking
ESSI Document : f:/wwwroot//diml/support/sqltest_short.pdim
Total elapsed time : 1.09 secs
-------------------------------
Phase 1 (init) : 0.05 secs
Phase 2 (resources) : 0.01 secs
Phase 3 (template extraction) : 0.00 secs
Phase 4 (conditional checks) : 0.00 secs
Phase 5 (precompilation of statics) : 0.00 secs
Phase 6 (main scan) : 1.03 secs
Phase 7 (header reconstruct) : 0.00 secs
-------------------------------
Feeder Invocation Time (within phase 6)
|
Les performances sont mesurées avec des algorithmes rigoureusement identiques, aux contraintes de portage près, entre les deux univers. Le processeur PHP ayant été déduit, quasiment ligne à ligne du processeur Perl. D'autres optimisations sont attendues, vraisemblablement développées en C, et accessibles des deux langages via une API de module, et qui devraient propulser encore les performances de ce moteur de templates.
All material is copyleft V.G. FREMAUX (EISTI France) 1999 to 2003 except explicitly mentioned
|