За последние 24 часа нас посетили 43888 программистов и 1813 роботов. Сейчас ищут 816 программистов ...

Помогите с производительностью

Тема в разделе "PHP для новичков", создана пользователем Даниль, 12 апр 2007.

  1. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    dark-demon

    если бы foreach был ее алиасом, то время исполнения не различалось бы в 3 с лишним раза..

    померил для join и implode (ибо первое - 100% алиас второго=)):

    Время исполнения join: 0.003045 секунд
    Время исполнения implode: 0.003158 секунд

    Время исполнения join: 0.003044 секунд
    Время исполнения implode: 0.003354 секунд

    Время исполнения join: 0.002817 секунд
    Время исполнения implode: 0.003095 секунд

    Время исполнения join: 0.002987 секунд
    Время исполнения implode: 0.004205 секунд

    Время исполнения join: 0.003038 секунд
    Время исполнения implode: 0.002909 секунд

    Время исполнения join: 0.002984 секунд
    Время исполнения implode: 0.003129 секунд

    Время исполнения join: 0.005415 секунд
    Время исполнения implode: 0.003009 секунд

    Время исполнения join: 0.002965 секунд
    Время исполнения implode: 0.002976 секунд
     
  2. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    DarkElf, а можешь тестовый код выложить? а то иногда так намеряют, что удивляешься, как там ещё расположение звёзд не влияет...
     
  3. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
  4. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    блин, ну я же не про join с implode :)
     
  5. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    PHP:
    1. <?
    2. $i = 250;
    3. $arr = array();
    4. $__foreach = array();
    5. $__for = array();
    6. $__while = array();
    7. $__while_ass = array();
    8. for($i;$i>0;$i--){
    9.     $arr[$i] = 'aaa';
    10. }
    11. $t[0] = microtime();
    12. foreach($arr as $k=>$v){
    13.     $__foreach[$k] = $v;
    14. }
    15. $t[1] = microtime();
    16. $j = count($arr);
    17. for($j;$j>0;$j--){
    18.     $__for[$j] = $arr[$j];
    19. }
    20. $t[2] = microtime();
    21. $k = count($arr);
    22. while($k--){
    23.     $__while[$k] = $arr[$k];
    24. }
    25. $t[3] = microtime();
    26. reset($arr);
    27. while(list($k,$v) = each($arr)){
    28.     $__while_ass[$k] = $v;
    29. }
    30. $t[4] = microtime();
    31. ?>
     
  6. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    у меня первый и второй способ одинаково быстры, четвёртый раза в 3-4 медленней, а третий ещё в 1-2.

    пс: перечитал твой пост ещё раз :) с перва я его понял с точностью до наоборот... ну в общем логично, foreach - более специфичная конструкция, а потому легче оптимизируется. в случае же с листом приходится на каждой итерации определять истинность возвращаемого массива.
     
  7. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Время исполнения цикла for: 0.009874 секунд
    Время исполнения цикла foreach: 0.000196 секунд
    Время исполнения цикла while: 0.026588 секунд
    Время исполнения цикла while для ассоциированного массива: 0.027205 секунд

    Время исполнения цикла for: 0.000164 секунд
    Время исполнения цикла foreach: 0.000202 секунд
    Время исполнения цикла while: 0.000141 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000853 секунд

    Время исполнения цикла for: 0.000198 секунд
    Время исполнения цикла foreach: 0.000173 секунд
    Время исполнения цикла while: 0.000137 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000678 секунд

    Время исполнения цикла for: 0.000192 секунд
    Время исполнения цикла foreach: 0.000172 секунд
    Время исполнения цикла while: 0.000138 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000739 секунд

    Время исполнения цикла for: 0.000168 секунд
    Время исполнения цикла foreach: 0.000304 секунд
    Время исполнения цикла while: 0.000149 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000546 секунд

    Время исполнения цикла for: 0.000165 секунд
    Время исполнения цикла foreach: 0.000169 секунд
    Время исполнения цикла while: 0.000137 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000549 секунд

    Время исполнения цикла for: 0.000164 секунд
    Время исполнения цикла foreach: 0.000197 секунд
    Время исполнения цикла while: 0.00014 секунд
    Время исполнения цикла while для ассоциированного массива: 0.00071 секунд

    Время исполнения цикла for: 0.000164 секунд
    Время исполнения цикла foreach: 0.000168 секунд
    Время исполнения цикла while: 0.000137 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000962 секунд

    Время исполнения цикла for: 0.000165 секунд
    Время исполнения цикла foreach: 0.000169 секунд
    Время исполнения цикла while: 0.000139 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000711 секунд

    Время исполнения цикла for: 0.000201 секунд
    Время исполнения цикла foreach: 0.000172 секунд
    Время исполнения цикла while: 0.000138 секунд
    Время исполнения цикла while для ассоциированного массива: 0.000691 секунд

    при $i = 250.