Bonsoir,
Bon voila, je cherche à faire du traitement de logs, les coloriser pour etre plus precis.
Je les recois sous la forme d'un tableau: une clé = une ligne de log.
Donc je cherche à les coloriser avec une répétition de "regles" de la sorte ( j'en ai un 20ene ):
Code :
foreach ( $logs as $id => $log ) { $log = preg_replace( '/bla bla/', "<span class=\"log_auth\">bla bla bla</span>", $log ); $log = preg_replace( '/bla bla 2/', "<span class=\"log_warn\">bla bla bla 2</span>", $log ); [...] $log = preg_replace( '/bla bla 23/', "<span class=\"log_error\">bla bla bla 23</span>", $log ); }
|
Je me suis dis que rajouter une boucle à l'interieur de la boucle pour eviter de matcher une ligne de log qui avait trouvée son occurence allait sensiblement me faire gagner en temps d'excecution, mais en faite non:
Code :
foreach ( $logs as $id => $log ) { $COLORIZE[] = array( 'filter' => '/bla bla1/', 'css' => 'log_auth', 'replace' => 'bla bla1' ); $COLORIZE[] = array( 'filter' => '/bla bla2/', 'css' => 'log_warn', 'replace' => 'bla bla2' ); [...] $COLORIZE[] = array( 'filter' => '/bla bla23/', 'css' => 'log_error', 'replace' => 'bla bla bla 23' ); foreach ( $COLORIZE as $rule ) { $log = preg_replace( $rule['filter'], "<span class=\"". $rule['css']. "\">". $rule['replace']. "</span>", $log ); continue; } }
|
La premiere facon est plus rapide que la 2e ( sur 3000 lignes de log, il y a une difference de 0.05 secondes ).
J'ai aussi essayé de refaire la 1ere méthode avec une boucle:
Code :
foreach ( $logs as $id => $log ) { $COLORIZE[] = array( 'filter' => '/bla bla1/', 'css' => 'log_auth', 'replace' => 'bla bla1' ); $COLORIZE[] = array( 'filter' => '/bla bla2/', 'css' => 'log_warn', 'replace' => 'bla bla2' ); [...] $COLORIZE[] = array( 'filter' => '/bla bla23/', 'css' => 'log_error', 'replace' => 'bla bla bla 23' ); foreach ( $COLORIZE as $rule ) { // Plus de test ni de continue, on en reviens a la 1ere méthode avec un foreach $log = preg_replace( $rule['filter'], "<span class=\"". $rule['css']. "\">". $rule['replace']. "</span>", $log ); } }
|
Cette méthode est la plus lente: + 0.13 seconde par rapport à la premiere.
Perso, je trouve que la 2e méthode est la plus élégante, mais est plus lente que la 1ere. Donc je me pose la question que j'ai énoncé dans le titre du topak: faut-il eviter les boucle si possible?
Message édité par ipnoz le 17-03-2010 à 02:48:34