Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenie regularne
Forum PHP.pl > Forum > Przedszkole
wNogachSpisz
Witam

któe zapytanie jest wydajniejsze?

  1. preg_replace('#[ ]+#', ' ');


czy
  1. preg_replace('#[ ]{1,}#', ' ');
cycofiasz
Zapytania nie widzę, mogę jedynie odnieść się do wyrażenia regularnego.
Obydwa mają podobną wydajność, różnice są zaniedbywalnie małe
ixpack
  1. function startTime() {
  2. $mtime = microtime();
  3. $mtime = explode(" ",$mtime);
  4. $mtime = $mtime[1] + $mtime[0];
  5. return $mtime;
  6. }
  7.  
  8. function endTime($starttime) {
  9. $mtime = microtime();
  10. $mtime = explode(" ",$mtime);
  11. $mtime = $mtime[1] + $mtime[0];
  12. $endtime = $mtime;
  13. return $totaltime = ($endtime - $starttime);
  14. }
  15.  
  16. //użyj tak:
  17. for($i=0;$i<10000;$i++) {
  18. $start = startTime();
  19.  
  20. //wykonaj tu swoje wyrażenie
  21.  
  22. $end = endTime($start);
  23.  
  24. $score+= $end;
  25. }
  26. echo $score;
  27.  


Prawda, że proste? smile.gif
wNogachSpisz
Cytat(cycofiasz @ 25.10.2011, 14:42:42 ) *
Obydwa mają podobną wydajność, różnice są zaniedbywalnie małe

Na czym opierasz tą wypowiedź?
Czy mógłbyś wypisać jakie czynności wykonuje mechanizm wyrażeń regularnych w każdym z przykładów? Jak wygląda przebieg dopasowania?
cycofiasz
Opieram ją o testy praktyczne
wNogachSpisz
Cytat(cycofiasz @ 25.10.2011, 15:38:44 ) *
Opieram ją o testy praktyczne

Czyli nie masz bladego pojęcia jak przebiega dopasowanie.
Zalezy mi na opinii kogoś kto zna to zagadnienie.
Sephirus
Spokojnie. Na pierwszy rzut oka mogłoby się wydawać, że wyrażenie #1 będzie szybsze - mniej znaków do sparsowania ale czy na pewno? Trzeba by się było zapytać kogoś kto implementował preg_replace'a. Moim zdaniem najważniejsze są testy. Bo teoria mówi jedno a praktyka drugie. Zrób test wydajnościowy i sam stwierdzisz. Będziesz miał pewność, że w tej konfiguracji, w tym systemie itd - jedno jest szybsze od drugiego - po co się zagłębiać jak to działa.

Przykład - Memcached VS Baza danych MySQL
Teoria: Memcache będzie szybszy

Założenia jedneog ze scenariuszy:
- ten sam serwer (lokalnie)
- zapis 10000 pozycji,
- odczyt 10000 pozycji,
- MySQL - myisam
- otwieranie i zamykanie połączenia przy każdym odczycie/zapisie (i MySQL i memcached)

I co się okazało?
memcache był zawsze znacząco wolniejszy od bazy (nieraz kilkukrotnie - najbardziej odczyt z tego co pamiętam)

Ja tam nie wiem - ale teorię lepiej sprawdzac praktycznie - a jak się nie ma podstaw teoretycznych to praktyka jest moim zdaniem najlepszym rozwiązaniem
cycofiasz
Cieszę się że Sephirus podziela moje zdanie.
Praktyka często różni się od teorii, mniemam że autorowi tematu nie chodzi o wewnętrzne algorytmy PCRE ale o wydajność, a tu najlepszym rozwiązaniem jest test praktyczny.

Na koniec dodam cytat z manuala PCRE:

Cytat
For convenience, the three most common quantifiers have single-charac-ter abbreviations:

* is equivalent to {0,}
+ is equivalent to {1,}
? is equivalent to {0,1}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.