IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Rapidité : regex vs fonctions natives ?


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut [Système] Rapidité : regex vs fonctions natives ?
    hello,

    Je voulais juste savoir si quelqu'un a fait des tests de rapidités entre les fonctions natives (str_replace, et autres) et les regex (ereg_replace, et autres).

    Y-en-a-t-il de plus rapide que d'autres ?. Que faut il utiliser pour privilégier la rapidité ?

    Merci
    Fabrice

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Tout dépend du contexte : les expressions régulières ne sont pas nécessaires dans tous les cas, d'autant plus que vous faites à tord allusion aux fonctions POSIX (ereg*) et non à celle de l'extension PCRE (preg_*) qui sont connues pour être plus performantes et souples ...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Dans le cas où effectivement, il n'y a pas besoin d'expression régulière, le manuel php ne ment pas.

    Voici les temps d'éxécution d'une série de mille tests d'exécution d'une centaine d'appel à strpos ou à preg_match pour la recherche d'une sous chaîne (de dix caractères) absente de la chaîne (de 26 caractères).



    Les temps ne sont pas linéaire en la taille de la chaîne à chercher, ni de celle dans laquelle trouver. On constate des performances bien meilleures dès que la chaine devient grande (26 000 caractères) :



    La différence s'accroit encore, lorsque la chaîne de recherche devient grande. (1000 caractères) Le temps pour strpos ne change pas, il n'y a pas de raison, par contre, preg_match a besoin de temps supplémentaire pour construire son automate :


  4. #4
    Membre habitué
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Points : 194
    Points
    194
    Par défaut
    Donc les PCRE sont bien plus rapide. Il faut donc les utiliser à place des POSIX.

    Pour les autres fonctions 'non-disponibles' en PCRE, les regex restent plus rapide que les fonctions natives de php ou non ?

    Fabrice

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 419
    Points
    419
    Par défaut
    Je pense que dans ce cas les fonctions natives de php sont plus rapides. Encore faudrait-il faire un bench pour en etre sur...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Le bench que vous voyez au dessus démontre exactement que strpos (qui est une fonction native) est plus rapide que preg_match (qui est une fonction PCRE) dans les cas où on a effectivement pas besoin d'expression régulière.

Discussions similaires

  1. [Système] utilisation de la fonction in_array
    Par WalidNat dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2006, 19h23
  2. Réponses: 2
    Dernier message: 18/05/2006, 14h45
  3. [Système] Pb avec la fonction copy()
    Par Shandler dans le forum Langage
    Réponses: 9
    Dernier message: 15/05/2006, 10h55
  4. [Système] probleme avec la fonction ora_exec()
    Par vrossi59 dans le forum Langage
    Réponses: 6
    Dernier message: 25/03/2006, 13h18
  5. [Système] rapidité d'exécution if <> switch
    Par lalouve dans le forum Langage
    Réponses: 12
    Dernier message: 10/02/2006, 23h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo