Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parsowanie stringu
Forum PHP.pl > Forum > PHP
adbacz
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.
nospor
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 :/
backen
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
nospor
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
adbacz
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
Crozin
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.
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.