![]() |
Pré-compilation des expressions régulières afin d'en accélérer l'exécution - Version imprimable +- Communauté Eggdrop (https://forum.eggdrop.fr) +-- Forum : Eggdrop et scripts (https://forum.eggdrop.fr/forumdisplay.php?fid=8) +--- Forum : Un peu plus loin (https://forum.eggdrop.fr/forumdisplay.php?fid=16) +--- Sujet : Pré-compilation des expressions régulières afin d'en accélérer l'exécution (/showthread.php?tid=1666) |
Pré-compilation des expressions régulières afin d'en accélérer l'exécution - MenzAgitat - 26/02/2017 La documentation Tcl dit ceci : Citation :Tcl dynamically caches the compiled regular expressions. The Tcl core caches the last 30 REs it compiled but you can cause an number of RE's to be cached by assigning them to variables. En faisant ceci, on stocke "foobar" dans la variable $regexp sous forme de string : tcl
comme on peut le voir ici : Citation :.tcl ::tcl::unsupported::representation $regexp mais dès qu'on exécute ceci, Tcl redéfinit la variable comme un Tcl_Obj contenant en plus de la string, une version précompilée : tcl
comme on peut le voir ici : Citation :.tcl ::tcl::unsupported::representation $regexp (à noter que la commande ::tcl::unsupported::representation existe à partir de Tcl 8.6) Démonstration de l'intérêt de stocker les patterns de regexp dans des variables afin de les pré-compiler et en accélérer l'exécution : Sans pré-compilation : tcl
Avec pré-compilation : tcl
Le gain de temps d'exécution en stockant les expressions régulières dans des variables est considérable. Une fois déclarées, ces variables ne devront plus être altérées sous peine de les reconvertir en strings simples. Il faudra donc éviter de les déclarer au début d'un procédure puisque chaque exécution de cette dernière écrasera les expressions pré-compilées. Déclarez-les avec variable dans votre namespace eval ou avec global si vous n'utilisez pas de namespace (mais ça, c'est mal). |