Bonjour à tou(te)s,

J'ai quelques problèmes de performance avec le mod_rewrite d'Apache, aussi je me demandais s'il s'agissait d'un problème de mon côté ou s'il était simplement très lent.

Ma config: WinXP Pro, Apache 2.0.55, PHP 5.1.2 (sans opcode cache ou accélérateur).

Pour l'expérience j'ai créé un fichier bar.html accessible via http://dev.apache.lan/bar.html
Ensuite j'ai créé un .htaccess pour accéder à la page via http://dev.apache.lan/foo
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
RewriteEngine  on
RewriteOptions MaxRedirects=1
RewriteRule    "^foo$"           bar.html   [NS,L]
Tout fonctionne correctement, quand je vais à http://dev.apache.lan/foo c'est bien le contenu de bar.html qui est affiché. Pour mesurer l'impact de mod_rewrite j'ai ensuite utilisé Apache Bench (ab pour les intimes) et là j'ai été surpris de voir que /foo était 20 fois plus lent que /bar.html! 50 pages/s contre plus de 1000 pages/s. Pour avoir un autre point de comparaison j'ai créé un fichier PHP foo.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<?php readfile('bar.html'); ?>
Résultat: l'affichage par PHP génère un peu moins de 500 pages par secondes, donc je ne comprends pas pourquoi mod_rewrite est si lent.

Quelqu'un aurait-il une idée ou un lien intéressant ?

Pour info, voici le résultat d'ab.exe, je n'ai laissé que les informations pertinentes pour des raisons de lisibilité. La page PHP génère autant d'HTML mais ne génère pas certains en-têtes tels que ETag ou Last-modified. (rajouter ces headers ne ralentit que marginalement son traitement donc ça n'explique pas non plus les différences entre mod_rewrite et PHP)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
C:\Program Files\EasyDev\Apache2\bin>ab -k -c 20 -n 500 http://dev.apache.lan/foo
 
Time taken for tests:   9.353450 seconds
Complete requests:      500
Failed requests:        0
Write errors:           0
Keep-Alive requests:    500
Total transferred:      152520 bytes
HTML transferred:       19000 bytes
Requests per second:    53.46 [#/sec] (mean)
Time per request:       374.138 [ms] (mean)
Time per request:       18.707 [ms] (mean, across all concurrent requests)
Transfer rate:          15.82 [Kbytes/sec] received
 
C:\Program Files\EasyDev\Apache2\bin>ab -k -c 20 -n 500 http://dev.apache.lan/bar.html
 
Time taken for tests:   0.380547 seconds
Complete requests:      500
Failed requests:        0
Write errors:           0
Keep-Alive requests:    500
Total transferred:      152520 bytes
HTML transferred:       19000 bytes
Requests per second:    1313.90 [#/sec] (mean)
Time per request:       15.222 [ms] (mean)
Time per request:       0.761 [ms] (mean, across all concurrent requests)
Transfer rate:          388.91 [Kbytes/sec] received
 
C:\Program Files\EasyDev\Apache2\bin>ab -k -c 20 -n 500 http://dev.apache.lan/foo.php
 
Time taken for tests:   1.31483 seconds
Complete requests:      500
Failed requests:        0
Write errors:           0
Keep-Alive requests:    500
Total transferred:      105520 bytes
HTML transferred:       19000 bytes
Requests per second:    484.74 [#/sec] (mean)
Time per request:       41.259 [ms] (mean)
Time per request:       2.063 [ms] (mean, across all concurrent requests)
Transfer rate:          99.86 [Kbytes/sec] received
D'avance merci !