ipnoz Les militaires sociopathes | 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
|