Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] each() funkcja przestarzała w php 7.2?
Forum PHP.pl > Forum > PHP
kukix
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() ?



Pyton_000
Odczułeś różnicę w wydajności zamieniając foreach na while?
kukix
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
Pyton_000
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
Tomplus
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
Pyton_000
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
Tomplus
Punkt smile.gif
Pilsener
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.
Pyton_000
Przykład z $++ i ++$z słabo trafiony wink.gif
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.