Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja kodu. Proste sztuczki., Czyli jak, za pomocą sztuczek, łatwo zoptymalizować kod
Cezar708
post
Post #1





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


Witam,

Proponuję podzielić się pomysłami na szybkie optymalizacje kodu za pomocą sztuczek:

na początek:
  1. <?php
  2. // do sprawdzania, czy istnieje element w tablicy:
  3. $cars = array( "bmw", "fiat", "volvo", "honda", ... );
  4.  
  5. // zamiast 
  6. if ( in_array('honda', $cars) ){ // ... 
  7.  
  8. // szybciej działa
  9. if ( isset($cars['honda'] ){ // ponieważ isset to nie funkcja tylko konstrukcja języka PHP
  10. ?>


podobnie:
  1. <?php
  2. // zamiast 
  3. if ( strlen( $md5string ) <= 32 ) { //....
  4.  
  5. // szybciej działa:
  6. if ( !isset( $md5string{32} ) ) { // wyjaśnienie jak wyżej
  7. ?>


trochę z innej beczki:
  1. <?php
  2. // zamiast 
  3. include( "skrypt.php" );
  4.  
  5. // szybciej działa
  6. include( "./skrypt.php" ); // ponieważ nie szuka w `include_path`
  7. ?>


lub
  1. <?php
  2. // zamiast 
  3. $i++;
  4.  
  5. // szybciej działa:
  6. ++$i; // ponieważ parser nie tworzy zmiennej tymczasowej
  7. ?>


.. macie jakieś sztuczki, którymi chcecie się podzielić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
prgTW
post
Post #2





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 10.09.2004
Skąd: Warszawa

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


  1. <?php
  2. for($k = 0; $k < 5; ++$k){
  3. $ratio = 0.0;
  4. for($j = 0; $j < 1000; ++$j){
  5. $i1 = xdebug_time_index();
  6. for($i = 0; $i < 10000; ++$i){}
  7. $i1 = xdebug_time_index() - $i1;
  8.  
  9. $i2 = xdebug_time_index();
  10. for($i = 0; $i < 10000; $i++){}
  11. $i2 = xdebug_time_index() - $i2;
  12.  
  13. $ratio -= $i1;
  14. $ratio += $i2;
  15. }
  16. var_dump($ratio);
  17. }
  18. ?>


Dla 10,000 iteracji i 1,000 pętli (10,000,000 obliczeń)
Wynik na plusie oznacza że postinkrementacja jest wolniejsza (poniższe wartości to różnice czasowe)
float 0.00971746444702
float 0.124341726303
float 0.105871200562
float 0.0391747951508
float 0.0849807262421

//edit:
Dla 100,000 iteracji i 1,000 petli (100,000,000 obliczeń):
float 0.449510574341
float 0.493491411209
float 0.503324985504
float 0.575709104538
float 0.55215716362

Ale sprawdzenie czy liczba jest parzysta bez zatrudniania procesora do wykonywania dzielenia (co jest dla niego najgorszym działaniem chyba) operując na bitach mi się bardzo podoba, o wiele szybsze (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

  1. <?php
  2. print $liczba & 1 ? 'nieparzysta' : 'parzysta';
  3. ?>


Ten post edytował prgTW 2.12.2007, 02:43:43
Go to the top of the page
+Quote Post

Posty w temacie
- Cezar708   Optymalizacja kodu. Proste sztuczki.   30.11.2007, 11:09:10
- - kevinsz   Cytat(Cezar708 @ 30.11.2007, 11:09:10...   30.11.2007, 11:45:36
- - Cezar708   Ups... fakt, pospieszyłem się troch...   30.11.2007, 12:01:52
|- - Jojo   Cytat(Cezar708 @ 30.11.2007, 12:01:52...   30.11.2007, 12:09:32
|- - pafka   Cytat(Cezar708 @ 30.11.2007, 12:01:52...   30.11.2007, 12:26:40
|- - NetJaro   Cytat(pafka @ 30.11.2007, 12:26:40 ) ...   30.11.2007, 16:45:33
|- - pafka   Cytat(NetJaro @ 30.11.2007, 16:45:33 ...   1.12.2007, 00:51:34
- - Cezar708   Cytat(Jojo @ 30.11.2007, 12:09:32 ) W...   30.11.2007, 12:31:32
- - sticker   [PHP] pobierz, plaintext <?php// zamiast $i++;...   30.11.2007, 17:08:26
|- - Jabol   Cytat(sticker @ 30.11.2007, 18:08:26 ...   30.11.2007, 20:39:31
- - sticker   Wcale z tego nie wynika, drzewo budowane jest na p...   30.11.2007, 20:53:20
- - Kreton   Czyżby temat zaczerpnięty z http://www.jarzebski....   30.11.2007, 21:56:59
- - nospor   CytatTylko tutaj własnie chodzi by obliczać to prz...   30.11.2007, 22:29:21
- - sticker   a ja dodam to po to chyba ten wątek był profilowa...   30.11.2007, 23:12:38
- - Bastion   @Nospor : do podejrzanych należy dodać : http://i...   1.12.2007, 00:33:54
- - prgTW   ++$i: miejsce w pamięci najpierw jest in...   1.12.2007, 14:54:53
|- - phpion.com   Cytat(prgTW @ 1.12.2007, 16:54:53 ) a...   1.12.2007, 15:28:24
- - prgTW   Aaa, sorry, siedze i pisze program w c++ i stąd ta...   1.12.2007, 15:45:25
- - Kreton   CytatRownie dobrze mozna powiedziec ze twoj link p...   1.12.2007, 23:01:48
- - sticker   Cytat(prgTW @ 1.12.2007, 14:54:53 ) +...   2.12.2007, 01:37:47
- - prgTW   [PHP] pobierz, plaintext <?phpfor($k = 0; $...   2.12.2007, 01:55:58
- - sticker   manual php w komentarzach mówi że http://php....   2.12.2007, 02:03:42
- - prgTW   A od kiedy PHP jest językiem kompilowanym? e...   2.12.2007, 02:07:04
- - sticker   a czy ja napisałem ze jest? nie wydaje mi się ...   2.12.2007, 02:12:52
- - prgTW   Oczywiście że nie, tylko nie ma sensu pi...   2.12.2007, 02:15:17
- - sticker   możesz dla testów puścic 100k i dać wyniki czasowe...   2.12.2007, 02:16:54
- - prgTW   troche potrwa ale wrzuce te 100k elementarnych ite...   2.12.2007, 02:26:29
- - sticker   oak zrobiłem testa dla 100k pre ...   2.12.2007, 02:27:16
- - prgTW   [PHP] pobierz, plaintext <?phpfor($k = 0; $...   2.12.2007, 02:49:55
- - domis86   Ok. To ja mam dla was zadanie Kto najlepiej zopty...   3.12.2007, 04:37:57
- - Cezar708   hmm zastanowiło mnie to i zrobiłem kilka testów: ...   3.12.2007, 11:10:41
- - domis86   Halo? Nikt nie da rady zrobic tego sortowania szy...   3.12.2007, 16:23:38
- - prgTW   [PHP] pobierz, plaintext <?phpfunction getMicro...   3.12.2007, 22:46:21
- - DeyV   Cytatmixed microtime ([ bool $get_as_float ...   4.12.2007, 11:46:15
- - bartek00   Witam, Nalezy zwrocic uwage na ograniczona dziedz...   4.12.2007, 15:08:40
- - domis86   <jupi> W koncu ktos odpowiedzial. Ehh kiepsk...   4.12.2007, 15:12:23


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 21:41