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
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
<?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)
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 !
Partager