АСѾԐД Создание и продвижение сайтов

Fast Site Engine

CMS для сайтов

Создать сайт

Карта сайта
Переходим на Линукс
Политика конфиденциальности
Сделать сайт на основе Fast Site Engine

Установка
Документация
Список изменений
Лицензионное соглашение

Скачать
О движкеОбо мнеДеятельностьПортфолиоКонтакты

Создать массив php

Самый простой и действенный метод обработки данных в любом языке программирования является массив. В данном тесте мы разбирёмся как быстрее создать массив php.
Я стараюсь не использовать многомерные массивы в php с большой вложенностью, нет смысла городить лишние мерности - скорость обращения к ним падает. Я храню конфигурацию и меню в массивах и мне крайне важен момент насколько быстро создаётся массив. Потестим так называемые автомассивы $a[]=''; индексные $a[9]=''; и структурная сборка массива $a=array('ключ'=>'значение',..); Сразу скажу что именные массивы мы тестить не будем поскольку это путь к перебору массива через foreach, прогоны по ключам бывают неоднократными, что убивает всю затею на корню (не верьте наслово - проверяйте сами :).

Индексные массивы vs автомассивы

Для начала разбирёмся какой массив быстрее собирётся - через указание следующего элемента или отдачи на откуп php.

function f1(){
  $i=0;
  while($i<LOOP){
    $a=array();
    $a[]=array('typ'=>'top', 'active'=>'yes',...;
    ..
    $a[]=array('typ'=>'top', 'active'=>'yes',...;//40
    ++$i;
  }
}
function f2(){
  $i=0;
  while($i<LOOP){
    $a=array();
    $a[0]=array('typ'=>'top', 'active'=>'yes',...;
    ..
    $a[40]=array('typ'=>'top', 'active'=>'yes',...;
    ++$i;
  }
}
Компьютер:
вызововвремя f1()время f2()победилбыстрее на
110.0002090.000113f2()0.000096 с.45.89 %
210.0001080.000109f1()0.000001 с.0.88 %
310.0001080.000108f2()0.000000 с.0 %
410.0001060.000110f1()0.000004 с.3.47 %
510.0001060.000107f1()0.000001 с.1.11 %
610.0001050.000106f1()0.000001 с.1.12 %
710.0001040.000105f1()0.000001 с.0.91 %
810.0001040.000108f1()0.000004 с.3.75 %
910.0001050.000105f2()0.000000 с.0.23 %
Всего: 90.0010550.000971f2()0.000084 с.7.96 %
Сервер:
вызововвремя f1()время f2()победилбыстрее на
110.0002080.000098f2()0.000110 с.52.92 %
210.0000900.000092f1()0.000002 с.2.07 %
310.0000910.000104f1()0.000013 с.12.81 %
410.0000910.000092f1()0.000001 с.1.3 %
510.0000900.000092f1()0.000002 с.2.07 %
610.0000890.000092f1()0.000003 с.3.37 %
710.0000920.000090f2()0.000002 с.2.33 %
810.0000940.000094f1()0.000000 с.0.25 %
910.0000910.000090f2()0.000001 с.1.31 %
Всего: 90.0009360.000844f2()0.000092 с.9.81 %

Как видим, повторный запуск создания массива происходит быстрей. т.е. срабатывают какие-то внутренние механизмы оптимизации, либо просто память не перераспределяется, а идёт по тем же блокам..

Сборка php массива через конструкцию array() vs через ключ

Узким местом движка является файл с меню, представляющий собой многомерный массив, мне крайне важен именно этот момент.

function f1(){
  $i=0;
  while($i<LOOP){
    $a=array();
    $a[0]=array('typ'=>'top', 'active'=>'yes',...;
    ..
    $a[40]=array('typ'=>'top', 'active'=>'yes',...;
    ++$i;
  }
}
function f2(){
  $i=0;
  while($i<LOOP){
    $a=array();
    $a=array(
      0=>array('typ'=>'top', 'active'=>'yes',...
      ..
      40=>array('typ'=>'top', 'active'=>'yes',...,
    );
    ++$i;
  }
}
Компьютер:
вызововвремя f1()время f2()победилбыстрее на
110.0002290.000109f2()0.000120 с.52.4 %
210.0001090.000103f2()0.000006 с.5.47 %
310.0001090.000101f2()0.000008 с.7.22 %
410.0001050.000102f2()0.000003 с.2.95 %
510.0001060.000102f2()0.000004 с.4.04 %
610.0001090.000104f2()0.000005 с.4.6 %
710.0001090.000102f2()0.000007 с.6.35 %
810.0001070.000104f2()0.000003 с.2.68 %
910.0001070.000102f2()0.000005 с.4.9 %
Всего: 90.0010900.000929f2()0.000161 с.14.79 %
Сервер:
вызововвремя f1()время f2()победилбыстрее на
110.0002120.000100f2()0.000112 с.52.81 %
210.0000940.000088f2()0.000006 с.6.35 %
310.0000920.000089f2()0.000003 с.3.37 %
410.0000940.000095f1()0.000001 с.1.01 %
510.0000920.000090f2()0.000002 с.2.07 %
610.0000930.000088f2()0.000005 с.5.63 %
710.0000990.000088f2()0.000011 с.11.08 %
810.0000920.000091f2()0.000001 с.1.04 %
910.0001010.000090f2()0.000011 с.11.08 %
Всего: 90.0009690.000819f2()0.000150 с.15.52 %

Создание php массива через автомассив vs через ключ

На заметку: с PHP 5.4 возможно использовать короткий синтаксис [] вместо array(). Уменьшение числа символов = увеличение скорости парсинга. На этот раз чистый тест, без повторов - запускаю скрипт по 3 раза.

function f1(){
  $i=0;
  while($i<LOOP){
    $a=[
    ['bottom','yes',false,'main','Главная','','','','','_self','']
    ...
    ,['bottom','yes',false,'search','Поиск','','','','','_self','']
    ];
    ++$i;
  }
}
function f2(){
  $i=0;
  while($i<LOOP){
    $a=[
    0=>[0=>'bottom',1=>'yes',2=>false,3=>'main',4=>'Главная',5=>'',6=>'',7=>'',8=>'',9=>'_self',10=>'']
    ...
    ,75=>[0=>'bottom',1=>'yes',2=>false,3=>'search',4=>'Поиск',5=>'',6=>'',7=>'',8=>'',9=>'_self',10=>'']
    ];
    ++$i;
  }
}
Компьютер:
вызововвремя f1()время f2()победилбыстрее на
110.0003040.000218f2()0.000086 с.28.31 %
210.0003540.000223f2()0.000131 с.37.04 %
310.0003070.000215f2()0.000092 с.29.97 %
Всего: 30.0009650.000656f2()0.000309 с.31.77 %
Сервер:
вызововвремя f1()время f2()победилбыстрее на
110.0004090.000212f2()0.000197 с.48.19 %
210.0004620.000171f2()0.000291 с.63 %
310.0003540.000187f2()0.000167 с.47.21 %
Всего: 30.0012250.00057f2()0.000655 с.52.8 %

PHP массивы с явным указанием индекса рулят.





17.07.2026
18.8.7534 от С.М.З.Х.
Unix time: 1784323114
© Все права защищены 2004 - 2026