Выносите многомерные массивы из “текстовых строк” – ускорение 25-30%. Одномерные можно не выносить.
При использовании многомерных массивов в строках наблюдается заметное снижение скорости Из-за многомерности нужно заключать переменные в парные фигурные скобки.
- {$x="test ".$myarray["name"]["second"][1]." test"; }
- {$x="test {$myarray[name][second][1]} test"; }
- {$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-х мерным массивом, но с обращением к элементу по его индексному номеру:
- {$x="test ".$myarray[3][2][0]." test"; }
- {$x="test {$myarray[3][2][0]} test"; }
- {$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 вариантах очень мала. Это говорит, что потери на не эффективное использование кавычек не слишком большое, чем доступ к массивам (см. тесты в первой главе).
- {$x="test".$myarray["test"]."test";}
- {$x="test$myarray[test]test"; }
- {$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% скорости – выносить многомерные массивы из скобок.
Такой же тест, но для одномерных:
- {$x="test".$myarray["test"]."test".$myarray["test"]."test".$myarray["test"]; }
- {$x="test$myarray[test]testtest$myarray[test]testtest$myarray[test]test"; }
- {$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%!).