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

Fast Site Engine

CMS для сайтов

Создать сайт

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

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

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

Обращение к массиву

Сегодня будет немного странный php тест про обращение к массиву, мучает вопрос: насколько просаживает производительность выделение временной переменной при обращении к элементу массива. Т.е. Что быстрее обращаться к элементу напрямую как $array[x][y] или выделять временный буфер $a=$array[x] и обращаться в более читабельной форме $a[y], заодно сокращая объём кода, как мы уже знаем чем больше - тем медленней переваривает компилятор..

Тесты PHP проводились на двух конфигурациях

Компьютер:
  Apache/2.4.34 PHP 7.2.10
  Linux version 4.15.0-45-generic (Kubuntu 18.04.2 LTS (Bionic Beaver) x86_64)
  12 x AMD Ryzen 5 1600X @ 3.70GHz
Сервер:
  Apache/2.4.38 PHP 7.2.15
  Linux version 2.6.32-042stab127.2 (Red Hat 4.4.6-4) (CENTOS 6.10 x86_64)
  4 x Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz

Функции тестирования

Взял меню данного сайта и на его основе буду гонять функции, это 74 пункта двухмерного массива в виде:

$m=[
...
74=>['typ'=>'left','active'=>'yes','lnk'=>false,'name'=>'php-array','text'=>'Обращение к массиву','hint'=>'','par1'=>'speed','par2'=>'','par3'=>'','target'=>'_self','title'=>'']];
define('LOOP',100);
function f1(){
  global $m;
  $i=0;while(++$i<LOOP){
    for($x=0;$x<75;$x++){
      $r=$m[$x];
      if('left'==$r['typ'] && 'yes'==$r['active'] && false==$r['lnk'] && 'php-array'==$r['name'] && 'speed'==$r['par1'] && ''==$r['par2'] && ''==$r['par3'] && '_self'==$r['target']){}
    }
  }
}
function f2(){
  global $m;
  $i=0;while(++$i<LOOP){
    for($x=0;$x<75;$x++){
      if('left'==$m[$x]['typ'] && 'yes'==$m[$x]['active'] && false==$m[$x]['lnk'] && 'php-array'==$m[$x]['name'] && 'speed'==$m[$x]['par1'] && ''==$m[$x]['par2'] && ''==$m[$x]['par3'] && '_self'==$m[$x]['target']){}
    }
  }
}

Результаты тестирования

Компьютер:
вызововвремя f1()время f2()победилбыстрее на
1100 0001.2476211.446282f1()0.198661 с.13.74 %
2100 0001.2505351.448183f1()0.197648 с.13.65 %
3100 0001.2491161.451035f1()0.201919 с.13.92 %
4100 0001.2456211.457405f1()0.211784 с.14.53 %
5100 0001.2426781.443696f1()0.201018 с.13.92 %
6100 0001.2502721.443653f1()0.193381 с.13.4 %
7100 0001.2583561.450491f1()0.192135 с.13.25 %
8100 0001.2552741.453763f1()0.198489 с.13.65 %
9100 0001.2451441.455513f1()0.210369 с.14.45 %
Всего: 900 00011.24461713.050021f1()1.805404 с.13.83 %
Сервер:
вызововвремя f1()время f2()победилбыстрее на
1100 0000.6161730.744694f1()0.128521 с.17.26 %
2100 0000.5781410.728324f1()0.150183 с.20.62 %
3100 0000.5843220.769890f1()0.185568 с.24.1 %
4100 0000.5792220.735389f1()0.156167 с.21.24 %
5100 0000.5883030.772614f1()0.184311 с.23.86 %
6100 0000.5754650.726392f1()0.150927 с.20.78 %
7100 0000.5721180.751896f1()0.179778 с.23.91 %
8100 0000.5745580.731050f1()0.156492 с.21.41 %
9100 0000.5645640.736749f1()0.172185 с.23.37 %
Всего: 900 0005.2328666.696999f1()1.464133 с.21.86 %

Использовать временную переменную выгоднее, нежели обращаться к массиву напрямую!





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