Статьи,обзоры,справочники по PHP

Выносите многомерные массивы из "текстовых строк" - ускорение -%. Одномерные можно не выносить.


При использовании многомерных массивов в строках наблюдается заметное снижение скорости Из-за многомерности нужно заключать переменные в парные фигурные скобки.

  1. {$x="test ".$myarray["name"]["second"][1]." test";       }
  2. {$x="test {$myarray[name][second][1]} test";             }
  3. {$x="test ";$x.=$myarray["name"]["second"][1];$x=" test";}
  4. счетчик кол-во
    вызовов
    общее
    вpемя
    сpеднее
    вpемя
    % от min% от maxобщее
    время
    test N113.53693.536900.0%69.9%
    test N215.06055.060543.1%100.0%
    test N314.60174.601730.1%90.9%

    Тот же пример с ассоциативным 3-х мерным массивом, но с обращением к элементу по его индексному номеру:

    1. {$x="test ".$myarray[3][2][0]." test";       }
    2. {$x="test {$myarray[3][2][0]} test";         }
    3. {$x="test ";$x.=$myarray[3][2][0];$x=" test";}
    счетчик кол-во
    вызовов
    общее
    вpемя
    сpеднее
    вpемя
    % от min% от maxобщее
    время
    test N113.30123.301200.0%73.1%
    test N214.16674.166726.2%92.3%
    test N314.51454.514536.8%100.0%

    Разница в 1 и 2 вариантах очень мала. Это говорит, что потери на не эффективное использование кавычек не слишком большое, чем доступ к массивам (см. тесты в первой главе).

    1. {$x="test".$myarray["test"]."test";}
    2. {$x="test$myarray[test]test";      }
    3. {$x="test{$myarray[test]}test";    }
    счетчик кол-во
    вызовов
    общее
    вpемя
    сpеднее
    вpемя
    % от min% от maxобщее
    время
    test N112.84952.849500.0%80.9%
    test N212.95192.951903.6%83.9%
    test N313.52023.520223.5%100.0%

    А теперь, на основании всех трех тестов, однозначный вывод: использовать фигурные скобки для обозначения границ имени элемента многомерного массива НЕЛЬЗЯ. Это сильно снижает скорость работы - 25-30% (в третьем варианте от простого добавления скобок скорость понизилась на четверть). Не использовать скобки нельзя. Следовательно, единственный способ не терять 30% скорости - выносить многомерные массивы из скобок.



    Содержание раздела