Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [optymalizacja] Porównanie funkcji pod względem szybkości!
cahe
post 11.08.2003, 23:06:49
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 22.03.2003

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


Mam pewien pomysł - umieścmy w tym topicu informacje o wyższości jednej funkcji/metody nad inną. Proszę nie offtopować ;-).

Może zaczne:

Porównanie:

foreach($tablica as $key => $value) i list($key, $value) = each($tablica)

Skrypt testowy:

  1. <?php
  2. mt_srand((double) microtime() * 100000);
  3. for($i = 0; $i < 10000; $i++)
  4. {
  5. $n[] = mt_rand(0, 1000000);
  6. }
  7.  
  8. foreach($n as $key => $tmp)
  9. {
  10. $tmp = abs($tmp);
  11. }
  12.  
  13. ?>


Oraz:
  1. <?php
  2. mt_srand((double) microtime() * 100000);
  3. for($i = 0; $i < 10000; $i++)
  4. {
  5. $n[] = mt_rand(0, 1000000);
  6. }
  7. while(list($key, $value) = each($n))
  8. {
  9. $value = abs($value);
  10. }
  11.  
  12. ?>


<b>Wyniki:</b>

Wszystko testowane: ab -c 60 -n 1000 na Apache 1.3.28@Win2k + php4.3.2

1. foreach():
Time taken for tests: 83.281250 seconds
Requests per second: 12.01 [#/sec] (mean)
Time per request: 4996.875 [ms] (mean)

2. list() i each():
Time taken for tests: 101.812500 seconds
Requests per second: 9.82 [#/sec] (mean)
Time per request: 6108.750 [ms] (mean)


Czyli przewaga (spora) po stronie foreach :-).

Proszę chętnych o zamieszczanie swoich wyników porównujących najczęściej używane przez Was funckje. Może być fajnie :-).

P.S. Czekajcie na więcej z mojej strony :-).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
FiDO
post 11.08.2003, 23:58:04
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Zawsze bardziej lubilem foreach'a niz each i tyko z tego 1 korzystalem. Czulem, ze cos w tym musi byc smile.gif

Widze, ze ab.exe Ci sie bardzo spodobal biggrin.gif
Go to the top of the page
+Quote Post
menic
post 12.08.2003, 01:21:06
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


Sorry za mały offtopic ale musiałem winksmiley.jpg Bardzo trafiony temat. Naprawdę mi sie super podoba. Mam nadzieję że sie ładnie rozwinie 8) biggrin.gif


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
kurtz
post 12.08.2003, 08:20:53
Post #4





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


Hej

- preg_* kontra ereg* -> pregi szybsze

- "ala" kontra 'ala' -> "ala" szybsze (ale nie "ala ma $kota")
czyli: (bardziej po polsku winksmiley.jpg - DeyV)
Cytat
najwolniej: $test = "ala ma $kota ";
dobrze:  $test = 'ala ma ' .  $kota ;
minimalnie szybciej:  $test = "ala ma ".  $kota ; (minimalna różnica - na granicy błędu)



- obiekty kontra funkcje -> funkcje
..


http://phplens.com/lens/php-book/optimizin...bugging-php.php misie drogie ... winksmiley.jpg


Pozdrawiam


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
kurtz
post 12.08.2003, 09:46:19
Post #5





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


A na dokładke artykul Leszka Krupinskiego

-> http://leon.w-wa.pl/artykul.html

tlumaczenie orginalnych dokumentow znalezionych w babilonie pod redakcja kurtza i phestusa ;)p


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
cahe
post 12.08.2003, 15:09:16
Post #6





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 22.03.2003

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


Mówi się dużo na temat tego, że file() jest wolniejszy od fgets(). Dodam również jedną inną funkcję - file_get_contents. Sprawdźmy :-).

Wszystko testowane: ab -c 60 -n 1000

Plik ma format:

Kod
c|x|a [nowa linia]

c|x|a [nowa linia]

...

Skrypt 1 (file):
  1. <?php
  2. //Otwarcie pliku - 10 tys. linii.
  3. $plik = file(&#092;"dane.txt\");
  4.  
  5. foreach($plik as $linijka)
  6. {
  7. unset($linijka);
  8. }
  9. ?>


<b>Wyniki: </b>

Time taken for tests: 60.171875 seconds
Requests per second: 16.62 [#/sec] (mean)
Time per request: 3610.313 [ms] (mean)
Time per request: 60.172 [ms] (mean, across all concurrent requests)


Skrypt 2 (fgets):

  1. <?php
  2. //Otwarcie pliku - 10 tys. linii.
  3. $plik = fopen(&#092;"dane.txt\", \"rb\");
  4.  
  5. while(!feof($plik))
  6. {
  7. $linijka = fgets($plik);
  8. unset($linijka);
  9. }
  10. ?>


Tryb rb - odczyt + binarny (funkcja file() jest binary safe).

<b>Wyniki: </b>
Time taken for tests: 69.531250 seconds
Requests per second: 14.38 [#/sec] (mean)
Time per request: 4171.875 [ms] (mean)
Time per request: 69.531 [ms] (mean, across all concurrent requests)

A więc <b> WOLNIEJ! </b> exclamation.gif :-).

Czas na file_get_contents. Będziemy dzielić wynik na linijki, żeby było sprawiedliwie.

Skrypt 3 (file_get_content):
  1. <?php
  2. //Otwarcie pliku - 10 tys. linii.
  3. $plik = file_get_contents(&#092;"dane.txt\");
  4.  
  5. $plik = explode(&#092;"n\", $plik);
  6.  
  7. foreach($plik as $linijka)
  8. {
  9. unset($linijka);
  10. }
  11. ?>


<b>Wyniki:</b>
Time taken for tests: 61.656250 seconds
Requests per second: 16.22 [#/sec] (mean)
Time per request: 3699.375 [ms] (mean)
Time per request: 61.656 [ms] (mean, across all concurrent requests)

Minimalnie wolniejszy od file(), ale zawsze ;-).

A więc w tej konkurencji wygrał file()! Oczywiście jeśli chodzi nam o dostęp do każdej liniki z osobna. Następnym razem sprawdzimy jak się te funkcje sprawdzają przy odczycie całych plików + pakowania ich do jednej zmiennej (coś czuje że file_get_contents wygra ;-)).
Go to the top of the page
+Quote Post
cahe
post 12.08.2003, 15:14:30
Post #7





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 22.03.2003

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


Cytat
Zawsze bardziej lubilem foreach'a niz each i tyko z tego 1 korzystalem. Czulem, ze cos w tym musi byc smile.gif

Widze, ze ab.exe Ci sie bardzo spodobal biggrin.gif


Tak, szukałem go od dłuższego czasu :-).

Cytat
Sorry za mały offtopic ale musiałem winksmiley.jpg Bardzo trafiony temat. Naprawdę mi sie super podoba. Mam nadzieję że sie ładnie rozwinie 8) biggrin.gif


Ty mi tu nie offtopuj tylko napisz coś ciekawego - porównaj jakieś funkcje. Może być więcej niż dwie. 8)

Dla zainteresowanych: Szukajcie programu ab.exe jeśli go nie macie (ja nie miałem w apache1.3.28 na win2k) - link jest na forum o apache, temat Apache Benchmark
Go to the top of the page
+Quote Post
Seth
post 17.08.2003, 12:57:03
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Aby nie zawalac forum php przyklejonymi topicami wrzucilem ten temat do php Pro
Go to the top of the page
+Quote Post
cahe
post 17.08.2003, 18:59:14
Post #9





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 22.03.2003

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


Cytat
Aby nie zawalac forum php przyklejonymi topicami wrzucilem ten temat do php Pro


To swietnie :-). A ponieważ dzisiaj wróciłem z weekendu - spodziewajcie sie na dniach jakis nowosci w topicu :-).
Go to the top of the page
+Quote Post
e-Gandalf
post 18.08.2003, 17:32:40
Post #10





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Kurtz: misiu drogi, a mozesz wyjasnic ta zagwozdke z przewaga "ala" nad 'ala'? Bo dla mnie jest to calkowicie nie logiczne... "" powinien przeszukiwac zawartosc na okolicznosc roznych pierdol PHPowych, a '' nigdy tego nie robi. Jakim wiec sposobem "" moze byc szybsze?!? (nie testowalem - mam maszyne w rozpdzie lekkim teraz :/)
Go to the top of the page
+Quote Post
DeyV
post 18.08.2003, 17:51:48
Post #11





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




zobacz testy - ja też byłem zdziwiony. (Ale sądzę, że błąd jest na granicy błędu, więc przy zwykłym stringu, nie zawierajacym zmiennych - nie ma to znaczenia. Natomiast przy wstawianiu zmiennych __należy__ stosować zapis "test" . $var . "test2"

ps. juz to dokładnie omawialiśmy (stąd te testy), tak więc te ostatnie posty pójdą do usunięcia.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
DeyV
post 13.10.2003, 09:43:20
Post #12





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




ostatnio trafiłem na takie porównanie: ( http://php.weblogs.com )
Cytat
Twisting by the PHPool  
Recently I posted a link to Twisted, a python library for developing socket servers. This generated a storm of interest as to whether php is suitable for developing similar custom networking applications. You should read the commentary in the above link for some interesting remarks by BDKR.  
So i benchmarked Nanoweb, a webserver written in php, against Apache. Test was repeatedly requesting a 4K HTML file (adodb-session.htm), using M'soft's WAST set at 10 concurrent threads. All software running on a 2.6 Ghz Win XP machine. php-CLI 4.3.3 was used to run Nanoweb.  

             Requests/Sec
Nanoweb          176
Apache 1.3.28    300

These figures suggest that a php networking app (Nanoweb) running on brand-new 2003 hardware (3 Ghz PC) will be faster than a program written in C (Apache) on good year 2000 hardware (1Ghz PC).  
Now if someone had told me in 2000 that in 3 years I would be able to run a web server written in php, and that it would run faster than the Apache of the year 2000, I wouldn't have believed the person. I think this sort of performance is a fantastic achievement for php and its developers.  

PS: For those of you who read the Twisted docs, you will see that it does not use threads, but callbacks. It should be possible to do something similar in php too.  

New: If you click on Discuss, you will see that Kemar has posted some benchmarks on Linux, and the numbers are quite different from Windows XP (9 Oct 2003)  


Nieco zaskakujące, nieprawdaż? Ale za to jak pozytywnie...


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
web86
post 13.10.2003, 10:01:52
Post #13





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.09.2003

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


Bardzo ciekawe.... Tylko jak to nanoweb napisano bo to mnie najbardziej interesuje.... Hmm a to dopiero zagadka...
Go to the top of the page
+Quote Post
web86
post 13.10.2003, 15:15:39
Post #14





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.09.2003

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


No no no, sciagnalem z ciekawosci z nanoweb.si.kz najnowsza wersje i zainstalowalem ja. Przyznam ze rzeczywiscie zaskoczyla mnie wielkosc pakietu (250 kb) no a sam opis:
Cytat
Nanoweb is an HTTP server written in php, designed to be small, secure, and extensible.  

It is distributed under the terms of the GNU General Public License.

Nanoweb's main features are :

- HTTP/1.1 compliance
- Powerful and easy configuration
- Modular architecture
- FastCGI, CGI and Server side includes support
- Name and port based virtual hosts
- Access control lists
- htpasswd, MySQL, PostgreSQL and LDAP authentication support
- Themes for server generated content
- Apache compatible log format, MySQL logging
- Directory browsing
- inetd support and SSL via external helpers
- Denial of Service protection
- Proxy Server extension
- Filters and gzip support
- RBL support (mail-abuse.org)
- Extension Protocols (request methods) support
- ... and a lot more
tez jest calkiem interesujacy. Biore sie za testy ;>
Go to the top of the page
+Quote Post
halfik
post 30.11.2003, 19:43:35
Post #15





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

Ostrzeżenie: (10%)
X----


w sprawie tych stringow, to sprawa jest oczywista:

"bla bla bla bla $zmienna"

musi być wolniejsze od

'bla bla bla'.$zmienna

ponieważ w pierwszy mprzypadku interpreter sprawdza cały ciąg i w razei potrzeby podstawie odp. wartości w miejsca zmiennych, a w drugim przypadku interpreter sprawdza doiero od momentu wystapienia pierwszego cudzyslowu. interpreter po prostu nie sprawdza apostrofów - wypluwa ich zawartość na ekran tak jak to programista stworzył :wink:


p.s po co Wam do mierzenia czasu wykonywnia sie poszczegolnch funkcji czy blokow jakies pluginy do apache'a ? a mktime() juz nie starcza ? :wink:
Go to the top of the page
+Quote Post
FiDO
post 22.07.2004, 22:41:22
Post #16





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Pozwole sobie odswiezyc troche topic smile.gif

Znalazlem ciekawy benchmark najzwyklejszej czynnosci jaka jest stosowanie petli...
Az zdziwilem sie, ze moze byc tyle tego sposobow. Zapraszam do obejrzenia wyników: http://www.phpinsider.com/benchmarks_phemp...l_benchmark.php
Najpierw zobaczcie sobie zrodla (jest tam odnosnik do nich), gdzy bez tego nie wiadomo specjalnie o co chodzi.


--------------------
Brak czasu :/
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: 24.07.2025 - 20:02