Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parsowanie stringu, Apostrof vs. cudzysłów vs. heredoc
adbacz
post 25.10.2012, 09:50:43
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Próba... ten sam ciąg znaków, te same zmienne w tych samych miejscach w ciągu znaków i wszystko w trzech funkcja, która każda z nich zwraca ten ciąg znaków w inny sposób. Funkcja EOF to heredoc. Funkcja stringA to cudzusłów. Funkcja stringB to apostrof. Jak myślicie, która będzie najszybsza?

Próba obejmowała przejście 50 iteracji pętli dla danej funkcji i przypisanie rezultatu do zmiennej. Każde wywołanie funkcji zostało liczone za pomocą microtime() i sumowane. Na końcu wynik dzielimy przez ilość iteracji i dostajemy wynik:

EOF: 0.0131 s
stringA: 0.0129 s
stringB: 0.0256 s

Kod użyty do próby znajdziecie tutaj: http://pastebin.com/NBEaUz5a

Zawsze myślałem, że apostrofy są szybsze niż cydzysłów. A tu proszę, zaskoczenie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post 25.10.2012, 10:20:31
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Bo do stringów używa się tego co w danej chwili jest najlepsze. Jak masz dużo zmiennych to używasz cudzysłowia. Jak masz mało zmiennych lub w ogóle żadnych to używasz apostrofu.

Poza tym Twój test jest źle zrobiony gdyż używasz zmiennych które nie istnieją przez co generujesz kupę błędów, które byś zobaczył gdybyś miał prawidłowo ustawione środowisko pracy :/


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
backen
post 25.10.2012, 10:23:52
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 3
Dołączył: 2.02.2009

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


testowałem ten sam tekst i wyszlo ze apostrof jest i tak troche wolniejszy nawet bez zmiennych.
Apostrof jest troszke szybszy po rozpisaniu go na "linijki"

tylko nie wiem co bd szybsze jak cudzysłowy sie rozpisze na liniki i wywali zmienne
Go to the top of the page
+Quote Post
nospor
post 25.10.2012, 10:30:17
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja też testowałem to bez zmiennych i wyszło że apostrof jest ciut szybszy. za każdym razem.

Wniosek: używajmy cudzysłowia bo i tak nie ma znaczącej różnicy smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adbacz
post 25.10.2012, 11:23:46
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Kurcze, fakt. Mój błąd. Test był prowadzony na serwerze produkcyjnym na którym są wyłączone raporty błędów a sam o tym zapomniałem. Po poprawkach czasy wyglądają następująco:

EOF: 0.0078 s
stringA: 0.0077 s
stringB: 0.0194 s

http://pastebin.com/9yu4A7kR
Go to the top of the page
+Quote Post
Crozin
post 25.10.2012, 13:19:33
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Ilość prób jest zbyt mała, testy powinny być wymieszane (tj. powinieneś sprawdzać N razy opcję A, B, C, nie N razy A, N razy B, N razy C), powinieneś uwzględnić odchylenie standardowe.
2. Niepotrzebnie bawisz się w mikrooptymalizację. Nawet jak już znajdziesz najlepszą opcję dla danego przypadku, a przypadków tych będzie masa (bo szybkość będzie tutaj uzależniona od ilości użytych zmiennych (czyli ilości łączeń tekstów), ich długości, systemu operacyjnego, dokładnej wersji PHP i pewnie kilku innych rzeczy) i uda Ci się przyspieszyć kod o te 0.00006 sek. będzie to całkiem bezwartościowe w przypadku skryptu wykonującego się 0.05 sek. Czas, który tutaj marnujesz mógłbyś wykorzystać do optymalizacji rzeczywistych problemów.
3. Jeżeli potrzebujesz skorzystać z składni HERE/NEWDOC to już masz wskazówkę na to, że coś spieprzyłeś. wink.gif Używaj tego, co w danej chwili wygodniejsze.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:26