Гру 272011
 

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

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

  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";}

 

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min % от max
test N1 1 3.5369 3.5369 00.0% 69.9%
test N2 1 5.0605 5.0605 43.1% 100.0%
test N3 1 4.6017 4.6017 30.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 N1 1 3.3012 3.3012 00.0% 73.1%
test N2 1 4.1667 4.1667 26.2% 92.3%
test N3 1 4.5145 4.5145 36.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 N1 1 2.8495 2.8495 00.0% 80.9%
test N2 1 2.9519 2.9519 03.6% 83.9%
test N3 1 3.5202 3.5202 23.5% 100.0%

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

Такой же тест, но для одномерных:

  1. {$x="test".$myarray["test"]."test".$myarray["test"]."test".$myarray["test"];   }
  2. {$x="test$myarray[test]testtest$myarray[test]testtest$myarray[test]test";      }
  3. {$x="test{$myarray[test]}testtest{$myarray[test]}testtest{$myarray[test]}test";}

 

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min % от max
test N1 1 6.5843 6.5843 00.0% 78.0%
test N2 1 6.7770 6.7770 02.9% 80.3%
test N3 1 8.4406 8.4406 28.2% 100.0%

Сравнивая два последних теста очевидно, что одномерные массивы можно и не выносить, потери всего 3-4% ( а вот на простых переменных – потери 25-40%!).