Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] each() funkcja przestarzała w php 7.2?
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Witam.

W ostatnim czasie zauważyłem ,ze na liscie funkcji deprecjonowanych jest each()

Od jakiegoś czasu przerabiałem pętle foreach() na pętle " while (list($id, $nazwa) = each($my_array)) { .. } " .

Widziałem różne testy, gdzie pętla while była szybsza, podobno nie robi w pamięcie serwera kopii tablicy jak pętla foreach().


Jaka jest Wasza opinia na ten temat? Muszę spowrotem zamieniać na foreach() ?



Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





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

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


Odczułeś różnicę w wydajności zamieniając foreach na while?
Go to the top of the page
+Quote Post
kukix
post
Post #3





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Cytat(Pyton_000 @ 6.10.2017, 18:06:11 ) *
Odczułeś różnicę w wydajności zamieniając foreach na while?


Nie chce się opierać na "odczuciach" i za 6 lat płakać, że stworzony niewydajny moloch nadaje się na śmietnik.

Chciałbym w każdym możliwym miejscu poprawiać wydajnośc, i nowe elementy tworzyć teżwoparciu o to. To chyba nic złego? smile.gif

Ten post edytował kukix 6.10.2017, 17:09:26
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





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

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


Stary, za 6 lat to to co napisałeś i tak pójdzie do kosza.

Nie zawracaj sobie dupy takimi pierdołami, bo są ważniejsze rzeczy do roboty niż medytacja 2 tygodnie nad wydajnością while vs foreach. Uwierz mi że to nie ma takiego znaczenia.

Nooo chyyyybaaaa że mielisz w pętli te tablice wielkości 10000000 elementów. Ale wtedy to raczej zastanowiłbym się po kiego taka wielka tablica.

Tak więc dla dobra Twojego, nie rób optymalizacji tam gdzie ich nie potrzebujesz na tą chwilę to zamiast pisać aplikację to stoisz w miejscu.

PS. I tak nie napiszesz idealnej aplikacji wink.gif

Ten post edytował Pyton_000 6.10.2017, 17:15:42
Go to the top of the page
+Quote Post
Tomplus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Python ma rację, optymalizacja pętli ma sens jeżeli nasz kod przetwarza dziesiątki tysięcy informacji, a nie zwykle proste informacje.
A ja ze swojej strony powiem, daną pętle stosuje się zgodnie z potrzebą, dlatego mamy kilka rodzai pętli do użycia pisząc kod.

na http://www.phpbench.com/ masz wynikowe testy wydajnościowe między foreach a while


Ten post edytował Tomplus 6.10.2017, 17:24:39
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





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

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


Masz... żeby nie było że się czepiam:


  1. <?php
  2. print "While vs Foreach benchmark" . PHP_EOL;
  3.  
  4. $elements = [
  5. 1,
  6. 10,
  7. 100,
  8. 1000,
  9. 10000,
  10. 100000,
  11. 1000000,
  12. 10000000,
  13. 100000000,
  14. ];
  15.  
  16. foreach ($elements as $element) {
  17. print "Starting test with $element elements" . PHP_EOL;
  18. print "Start Generating elements" . PHP_EOL;
  19. $start = microtime(true);
  20. $data = range(1, $element);
  21. print "Finished generating elements: " . (microtime(true) - $start) . PHP_EOL;
  22.  
  23. reset($data);
  24. print "Start while()" . PHP_EOL;
  25. $start = microtime(true);
  26. while (list($a, $b) = each($data)) {
  27.  
  28. }
  29. print "Finished while: " . (microtime(true) - $start) . PHP_EOL;
  30.  
  31. print "Start foreach()" . PHP_EOL;
  32. reset($data);
  33. $start = microtime(true);
  34. foreach ($data as $a => $b) {
  35.  
  36. }
  37. print "Finished foreach: " . (microtime(true) - $start) . PHP_EOL;
  38. print PHP_EOL.PHP_EOL;
  39. }


i wyniki:
http://bin.devsphp.pl/fe4c17dbf540f3403a3e...8bfe037b676.sql
Go to the top of the page
+Quote Post
Tomplus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Punkt smile.gif
Go to the top of the page
+Quote Post
Pilsener
post
Post #8





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
podobno nie robi w pamięcie serwera kopii tablicy
- kiedyś na pewno tak było, teraz nie wiem i może to mieć znaczenie dla zużycia pamięci a i to w czasach, gdy miałeś do dyspozycji kilka MB bez wsparcia różnych middleware i trzeba było się poważnie zastanawiać, co wrzucać do tablicy a co nie.
PHP jest prostym językiem skryptowym do określonych zastosowań i jeśli np. chcesz w PHP napisać algorytm analizujący czarne dziury czy kwazary to znaczy, że wybrałeś złą technologię Lkingsmiley.png
Nie ma sensu się zastanawiać nad $z++ vs ++$z bo nawet najlepszy kod PHP nigdy nie dorówna językom kompilowanym.
Jeśli wydajność algorytmu jest kluczowa a nie np. szybkość klepania backendu to należy użyć innej technologii.
Optymalizując algorytm w PHP na typowej stronie zyskasz może 0,1%, bo 99,99% problemów z wolno ładującymi się stronami to zły model danych, nadmierna ilość zewnętrznych requestów, słaby serwer, złe projektowanie całej strony, skopana część frontendowa i tak dalej.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #9





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

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


Przykład z $++ i ++$z słabo trafiony wink.gif
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 - 09:43