Google Chercher dans diml.org
[ english ]

Table des matières
1. Condition d'exécution des Benches DIML
1.1 Conditions sur la version Perl
1.2 Conditions sur la version Php
2. Exécution des Benches DIML
3. Notes sur les performances
3.1 Performances du noyau de base
3.2 Performances accès MySQL (extension ESSISql)
3.3 Discussion sur ces performances
 Dernières infos
 Une application du composant  WCT_NEWS  
>> Haut de la page

Perl vs. PHP

1. Condition d'exécution des Benches DIML

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.

1.1 Conditions sur la version Perl

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.

1.2 Conditions sur la version Php

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.

2. Exécution des Benches DIML

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.

3. Notes sur les performances

3.1 Performances du noyau de base

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

3.2 Performances accès MySQL (extension ESSISql)

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)

3.3 Discussion sur ces performances

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