Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Co szybsze: row czy array, Czy nieużyte funkcje wpływają na czas ładowania strony?
Xeer
post 10.05.2017, 21:24:55
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 1.05.2017

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


Witam.

Mam dwa pytania związane z szybkością wykonywania.

1. Parę lat temu czytałem gdzieś, że mysqli_fetch_row jest szybsze od mysqli_fetch_array, jednakże teraz nigdzie nie mogę tego znaleźć i dlaczego, a może to były tylko jakieś brednie i mi się utkwiło w pamięci?

2. Jeżeli nawaliłbym sobie np. 100 funkcji w pliku i nie użył ich to ma to wpływ na szybkość ładowania się strony? Czy dopiero gdy użyję danej funkcji to ma ona wpływ na szybkość ładowania strony?

Dziękuję z góry za wyjaśnienia,
Pozdrawiam!
Go to the top of the page
+Quote Post
Pyton_000
post 10.05.2017, 21:32:16
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Ilość funkcji ma jedynie wpływ na załadowanie ich do pamięci ergo zarezerwowany rozmiar pamięci.

Co do mysqli_ to bym się tym nie przejmował.
Go to the top of the page
+Quote Post
viking
post 11.05.2017, 04:09:17
Post #3





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Ja bym sie zastanowił nad http://php.net/manual/en/mysqli-result.fetch-object.php. nowe php potrafi być kilkukrotnie szybsze przy pracy nad obiektami nad tablicami.


--------------------
Go to the top of the page
+Quote Post
nospor
post 11.05.2017, 10:42:56
Post #4





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




@viking wzialem jakis na szybko test z netu

  1. $s = array();
  2. $time_start = microtime(true);
  3. for($x=0;$x<10000;$x++)
  4. {
  5. $s[] = array("name"=>"Adam","age"=>35);
  6. $s[$x]['name'];
  7. $s[$x]['age'];
  8. }
  9. echo memory_get_usage() - $sm . '<br />';
  10. $time_end = microtime(true);
  11. $time = $time_end - $time_start;
  12. echo $time . 's<br />';
  13.  
  14.  
  15.  
  16. $s = array();
  17. $time_start = microtime(true);
  18. for($x=0;$x<10000;$x++) {
  19. $o = new ArrayObject; $o->name = "Adam"; $o->age = 35; $s[] = $o;
  20. $s[$x]->name;
  21. $s[$x]->age;
  22. }
  23. echo memory_get_usage() - $sm . '<br />';
  24. $time_end = microtime(true);
  25. $time = $time_end - $time_start;
  26. echo $time . 's<br />';
  27.  
  28. $s = array(); class MyArrayObject {
  29. public $name, $age;
  30. public function __construct( $name, $age ) { $this->name = $name; $this->age = $age; }
  31. }
  32. $time_start = microtime(true);
  33. for( $x=0;$x<10000;$x++){
  34. $o = new MyArrayObject("Adam", 35 ); $s[] = $o;
  35. $s[$x]->name;
  36. $s[$x]->age;
  37.  
  38. }
  39. echo memory_get_usage() - $sm . '<br />';
  40. $time_end = microtime(true);
  41. $time = $time_end - $time_start;
  42. echo $time . 's<br />';

Wyniki dla php7.1
Kod
528440
0.00067687034606934s
6251320
0.0043520927429199s
1327880
0.0014209747314453s

Jak widac zarowno czasowo jak pamieciowo tablice sa zdecydowanie lepsze. Na drugim miejscu sa obiekty tworzone z gotowej klasy zas na koncu sa obiektu tworzone dynamicznie.

fetch_object() zwraca obiekty tworzone dynamicznie wiec teoretycznie wypadnie najgorzej. Jakies uwagi, komentarze? Chetnie podyskutuje na ten temat bo mnie interesuje 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
Pyton_000
post 11.05.2017, 11:25:53
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Panie kochany my tu mówimy o metodach BD a nie typach generycznych w porównaniu do obiektu biggrin.gif
Raczej coś w ten deseń ale dla mysqli_ i PDO
http://www.spearheadsoftwares.com/tutorial...ql-fetch-object
Go to the top of the page
+Quote Post
nospor
post 11.05.2017, 11:32:12
Post #6





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




Panie rowniez kochany, z twojego arta
Cytat
. mysql_fetch_object performance is justified as it returns objects instead of native arrays which will always bring in a better memory usages than any other kinds of output array

Czyli mowa o normalnych objects vs arrays. Z artykulu nie wynika nic, ze jakos magicznie inaczej podchodza tutaj do obiektow i tablic.
I tak, tez czytalem prace naukowe jak to obiekty sa lepsze pamieciowo od tablic, a tu prosze, zonk. Moze robie zle test?


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

"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
viking
post 11.05.2017, 11:41:03
Post #7





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Nie bardzo widzę teraz link (na twitterze) ale był to test jednego z core doveloperów PHP, jakiś miesiąc temu robiony. Dla prostych obiektów, bez przeliczeń, zużycie pamięci było dla obiektu 4-6 mniejsze niż dla tablicy. W przypadku operacji jest to wynik jak dla tablic plus lekko narzut na alokację pamięci dla obiektu. Zresztą ostatnio sporo grzebią w VM i widać znaczne poprawy.


--------------------
Go to the top of the page
+Quote Post
nospor
post 11.05.2017, 11:44:56
Post #8





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




@viking ja tez widzialem tego typu testy, teorie i ladnie opisane dlaczego obiekty sa lepsze od tablic. Dzis jednak chcialem to sprawdzic w praktyce i zonk. Nie wierze ze moja wersja php jest jakos specjalna wink.gif

Jedyne co sie zgadza w moim tescie z tymi teoriami to fakt,ze dynamiczne obiekty wypadaja o wiele gorzej od tych z gotowych klas


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

"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
viking
post 11.05.2017, 13:00:41
Post #9





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


https://3v4l.org/NOL3E/perf#output

Po tym widać jak najnowsze wersje php dostają po dupie w wydajności. Przykładowo dla 7.0.14

Kod
4288384<br />0.0068209171295166s<br />6251264<br />0.0039088726043701s<br />1327824<br />0.0019130706787109s<br />


--------------------
Go to the top of the page
+Quote Post
Xeer
post 11.05.2017, 18:03:10
Post #10





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 1.05.2017

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


Czyli z tego co rozumiem, nie ma określonych reguł i znaczenie mają wersje PHP i (być może) moc maszyny na której znajduje się serwer WWW.
Czy może ja coś źle zrozumiałem z tego wszystkiego?
Ponieważ jak tak analizuję, u jednej osoby szybciej działa metoda a, u drugiej metoda b, a to jedna osoba wypowiada się, że PHP7 dostaje po dupie od PHP5...

Ogółem rzecz biorąc nie byłem dotychczas pozytywnie przekonany do PHP7 i jak na razie chyba nadal zostanę przy 5-tce.

Co do testów - nie powiem, całkiem ciekawe.
Szkoda jednak, że sam nie mogę ich sprawdzić dokładnie na własnej skórze, ponieważ mój hosting potrafi za 1 razem załadować coś przykładowo w 50ms, raz w 200ms a raz w 500ms - sam chciałem parę testów przeprowadzić no ale z takim hostingiem który posiadam niestety średnio jest to możliwe.

Ale dziękuję za dobrą konwersację, z pewnością nie raz jeszcze zajrzę do tego wątku wink.gif

Pozdrawiam.
Go to the top of the page
+Quote Post
nospor
post 11.05.2017, 18:14:58
Post #11





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




Cytat
a to jedna osoba wypowiada się, że PHP7 dostaje po dupie od PHP5...

Ogółem rzecz biorąc nie byłem dotychczas pozytywnie przekonany do PHP7 i jak na razie chyba nadal zostanę przy 5-tce.
Osoba, ktora to ci powiedziala bredzi. php7 w porownaniu do php5 to torpeda. Byc moze troche zwalnia z kolejnymi wydaniami php7 ale nadal jest zdecydowanie szybsze i lepsze od php5. Zostawanie teraz z php5 to cofanie sie.


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

"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
Xeer
post 11.05.2017, 18:29:57
Post #12





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 1.05.2017

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


Cytat(nospor @ 11.05.2017, 19:14:58 ) *
Osoba, ktora to ci powiedziala bredzi. php7 w porownaniu do php5 to torpeda. Byc moze troche zwalnia z kolejnymi wydaniami php7 ale nadal jest zdecydowanie szybsze i lepsze od php5. Zostawanie teraz z php5 to cofanie sie.


A co z przykładem który podał pan viking?
https://3v4l.org/NOL3E/perf#output

Wyraźnie PHP5 szybciej się wykonuje w tym przykładzie niż PHP7.
Go to the top of the page
+Quote Post
Pyton_000
post 11.05.2017, 20:52:00
Post #13





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zdecydowanie nie warto zostawać przy 5, tym bardziej że z końcem przyszłego roku kończy definitywnie swój żywot i zostaje wsparcie tylko dla 7.

Ww. test u mnie wygląda tak:

Kod
→ php test.php => php 7
0.062088012695312                                                                                                                                                                                                              

→ dco exec --user application web php test.php => php 5.6
0.074342012405396


dla kodu:
  1. <?php
  2. $start = microtime(true);
  3. class Foo {
  4.  
  5. public $a;
  6.  
  7. }
  8.  
  9. $foos = array();
  10. for ($i = 100000; $i--;) {
  11. $foo = new Foo;
  12. $foo->a = 1;
  13.  
  14. $foos[] = $foo;
  15. }
  16.  
  17. echo microtime(true) - $start;
Go to the top of the page
+Quote Post
nospor
post 12.05.2017, 10:12:08
Post #14





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




Cytat
A co z przykładem który podał pan viking?

Nie mam bladego pojecia jak dziala stronka, na ktorej testowal to viking, ale dziala zle wink.gif wg tej stronki php7 jest niesamowicie wolne w kazdej wersji

specjalnie dla ciebie odpalilem moj test na php5. Oba php chodza na tej samej maszynie z takim samym obciazeniem.
Oto czasy dla php5
Kod
5891656
0.011223077774048s
10234536
0.022026062011719s
3255624
0.01256799697876s

Jak widac golym okiem wyniki sa totalnie gorsze


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

"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
viking
post 12.05.2017, 10:33:46
Post #15





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Co ja mówiłem to że ostatnie wydania PHP 7.1 są skopane i zdecydowanie szybciej ten kod wykonuje się na stabilnych 7.0. Znudziło mi się trochę śledzenie grupy PHP internals ale dopoki to robiłem nawet raporty z buiklów to potwierdzały. W PHP 7.0 przepsano od nowa algorytm odpowiedzialny za obsługę tablic, dlatego w porównaniu do v5 są kilkukrotnie szybsze. Kod nospora można wrzucić do jakiegokolwiek sandboxa online i sobie porównać.


--------------------
Go to the top of the page
+Quote Post
nospor
post 12.05.2017, 10:40:21
Post #16





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





Cytat
Co ja mówiłem to że ostatnie wydania PHP 7.1 są skopane i zdecydowanie szybciej ten kod wykonuje się na stabilnych 7.0.
Wg. testu co pokazales wynika, ze i php7.0 dziala wolniej od php5. Dlatego tez srednio ufam stronce, na ktorej to testowales. Ot i tyle 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
viking
post 12.05.2017, 11:47:36
Post #17





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Strona uruchamia tylko kod na różnych wersjach parsera i podaje wyniki. To pokazuje tylko że nie ma się za bardzo co przejmować wydajnością bo każda wersja PHP się różni - w jednej coś zepsuto i nagle jest wolniej niż to było wcześniej. Z drugiej strony ewolucja oprogramowania, choćby na przykładzie systemów operacyjnych pokazuje, że to wcale nie jest takie głupie. Niby jest coraz szybszy sprzęt - n-rdzeniowe i wątkowe CPU, dyski NVMe itp, a ze względu na coraz więcej funkcji wcale to nie działa szybciej.


--------------------
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: 1.07.2025 - 06:28