Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyrażenie regularne, wydajność
wNogachSpisz
post
Post #1





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Witam

któe zapytanie jest wydajniejsze?

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


czy
  1. preg_replace('#[ ]{1,}#', ' ');
Go to the top of the page
+Quote Post
cycofiasz
post
Post #2





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Zapytania nie widzę, mogę jedynie odnieść się do wyrażenia regularnego.
Obydwa mają podobną wydajność, różnice są zaniedbywalnie małe
Go to the top of the page
+Quote Post
ixpack
post
Post #3





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

Ostrzeżenie: (0%)
-----


  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


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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?

Ten post edytował wNogachSpisz 25.10.2011, 14:15:25
Go to the top of the page
+Quote Post
cycofiasz
post
Post #5





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Opieram ją o testy praktyczne
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #6





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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.
Go to the top of the page
+Quote Post
Sephirus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
cycofiasz
post
Post #8





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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}
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 23:36