![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Mam takie pytanie:
Jak szybka jest tablica $GLOBALS w porównaniu np z np.
lub po prostu gdy zmieniam wartość elementu w tej tablicy to jak szybko to się dzieje w porównaniu z innymi sposobami przechowywania zmiennych. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował Zigi 2.01.2005, 15:35:47 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź jeżeli Cię to interesuje.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
sf dając ten temat miałem nadzieje, że ktoś to wie i mi odpowie lub da link do takich danych. A nie da tylko bezmyślą odp. żeby sobie nabić liczbę postów.
Może nie tylko ja myślę o optymalizacji kodu. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%) ![]() ![]() |
sf nie był bezmyślny - tylko podpowiedział ci, że możesz samemu to przetestować.
|
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
]odwolanie do globalnych zmiennych za pomoca "$GLOBALS[ 'zmienna' ]" :: 24.35369 sec
odwolanie do globalnych zmiennych za pomoca "global $zmienna" :: 19.90904 sec 1 metoda / druga = 1.2232487912393 przy 2 000 000 powtorzeniu takich operacji
Ten post edytował dr_bonzo 2.01.2005, 18:38:57 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Optymalizacja kodu ma to do siebie, że skupia się bardziej na rzeczach, które zajmują znaczącą ilość czasu na wykonanie, a mniejszą uwagę na `pierdołach`.
W manualu php mamy przedstawione np. zestawienie szybkości $_GET i $_SESSION, a także define i const. Tylko tak naprawdę czy to zmieni mój sposób pisania? Nie. Bo te rzeczy w zamiarze mają być do czego innego. Jak czytałeś symfonie c++ to pamiętasz rozdział gdzie było opisane czy używać define czy const, autor nie skupia się na takich pierdołach, że to mu o ileś tam wolniej działa, tylko na tym gdzie i dlaczego tego używać. Bo w zamiarze program ma wykonywać ważniejsze rzeczy i optymalizacja innej cześći programu da ZNACZĄCE rezultaty. Dlatego jeśli masz teorię i już tak opanowałeś optymalizację kodu to możesz zacząć bawić się w takie rzeczy, które czasem coś wnoszą, ale to jak już opanujesz inne ważniejsze rzeczy. Ponownie gorąco Cię namawiam byś sam sprawdził co jest bardziej optymalne jeżeli uważasz, że to naprawdę zmieni coś w działaniu Twojego skryptu, a jeśli pytasz tylko z ciekawości to też lepiej wtedy samemu to zbadać... oczywiście przed przeszukaniem google by nie robić tego co ktoś już zrobił. Na końcu chciałbym się odnieść do Twoich postów skoro oceniasz moje. Tak naprawdę nie skupiają sie na niczym poza Twoimi wymysłami. Przedstawiłeś jeden kod, w którym masz 2 zmienne globalne, które tak naprawdę tam nie muszą być bo można zapisać ten kod bez nich. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam Cię sf jeżeli poczułeś się urażony moją opowiedzią w jakimkolwiek stopniu. Nie tak miało to zabrzmieć.
Nie chce mi się już robić kolejnych porównań w szybkości wykonywania się podobnych instrukcji. Robiłem już porównania print-echo, tablice o róznej ilości wymiarów, zmienne (integer) w ""-'' lub bez niczego. Dla mnie ważnę są te zmienne globalne ponieważ gdyby tablica $GLOBALS['element'] byłaby szybsza od deklaracji global to bardzo ułatwiło i przyspieszyło mi pisanie skryptu. Ja wykorzystuję w moim projekcjie 3 zmienne które muszą być dostępne w prawie każdej funkcji, a w czasie generowania strony jest ich wywołyna min. kilkanaście. W manualu (php_manual_pl.chm) nie udało mi się znaleźć tego zestawienia. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
witam ...
powiem szczeze ze dosc dziwne wyniki mi wyszly jak sobie zrobilem tescik ... taki skrypcik:
i najwolniejszy jest .... <werble> .... </werble> speedTest4 (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) wykonanie zajmuje [przy 100 000 w loopie] okolo 1.8s ... a teraz 2 niespodzianka ... najszybszy jest speedTest1 (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !!! okolo 450 ms (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) czyli poza uzywaniem zmiennych w funkcjach wazny jest rowniez sposob deklaracji ... przy deklaracji zmiennej jako globalnej na poczatku zyskujemy na wydajnosci [moze php najpierw sprawdza tablice $GLOBALS a jak zmiennej tam niema to szuka w pamieci zmiennych ?] wydajnosc jest zgodna z deklaracja kolejnych funckji ... pomiary robilem przy pomocy profilera z nusphere phped 3.3.3 i plugina DBG php debugger version 2.16.14 na php 4.3.8... powtarzane kilka razy na 2 serwerach ... przy bardziej zyciowej ilosci loopow [100] sytuacja sie zmienila ... najszybsze funkcjie to speedTest4 i 2 [na zmiane ... roznica w zakresie bledu] a najwolniejsze to 1 i 2 ... ale to i tak nic nie zmienia ... dlatego ze wykoanie najszybszej trwalo 0.165 a najwolniejszej 0.205 ... wiec odwrotnosc wynikow moze byc spowodowana .... dlugoscia wiersza z printem [sic!] - profiler pokazuje czas wykonania poszczegolnych wierszy nie tylko czas funkcji ... ps. mowie zeby nie bylo jakis watpliwosci zmienilem kolejnosc funkcji w pliku na odwrotna i nadal najwolniesza byla speedTest4 ps2. jak juz jestesmy przy profilerze to moze kilka ciekawostek:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 20.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Orson fajny test porównawczy dzięki za jego wykonanie. Dziwne jest to, że dr_bonzo wyszło, co innego i teraz kto ma racje? Ponieważ stopien komplikacji skryptów jest podobny. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Orson ja nie używam już praktycznie nie używam profilera w phped (zrozumiałem, że to użyłeś do pomiarów) ponieważ u mnie miał bardzo duże rozbieżnośći w wynikach za każdym razem. Ja wykorzystuje funkcję, która jest w manualu daje od razu cały kod:
I daje pętlę tak dużą aby wykonywała się na danym komputerze kilka sekund, a nie tylko 1s lub mniej ponieważ wynik wtedy nie jest już zbyt miarodajny. Czekam na kolejne testy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
witam
Cytat I daje pętlę tak dużą aby wykonywała się na danym komputerze kilka sekund, a nie tylko 1s lub mniej ponieważ wynik wtedy nie jest już zbyt miarodajny. to nie jest miarodajny test ... poniewaz w warunkach produkcyjnych nigdy nie masz skryptow ktore wykouja sie kilka sekund ... 10 userow i zarzniesz serwer ... dlatego zrobilem tez testy dla 100 loopow ... najbardziej miarodajny jest chyba ab [apache benchmark] ... on symuluje wywolanie przegladarki .... ale nim mozna miezyc pojedyncze funkcjie [ np. do 1 pliku dajesz funkcjie i wywolujesz plik 1000 razy i sprawdzasz jakie ma czasy] ale mi nie chcialo sie bawic wiec zrobilem profilerem bo chcialem widziec roznice w konkretnych miejscach a nie w calym skrypcie ... pozdrawiam |
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ja wykorzystuję w moim projekcjie 3 zmienne które muszą być dostępne w prawie każdej funkcji, a w czasie generowania strony jest ich wywołyna min. kilkanaście. Z tego wynika ze mozesz wybrac dowolna z metod, czas odwolania sie powiedzmy te 100 razy w ciagu wykonania skryptu do zmiennych globalnych to ledwie 1.2 ms (na moim kompie). Moj kod testowy (php 5):
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:38 |