
Сегодня рассмотрим структуры данных из стандартной библиотеки php (SPL) и процедурный подход с массивами. И замеряем скорость выполнения на разных версиях PHP, а именно на 5.6 и 7. Начнем с простого, структура Стек.
Стек (англ. stack — стопка; читается стэк) — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).
Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.
Результат если лень читать:
 

Процедурный подход Link to heading
Запись: Link to heading
<?
$repeatSize = 3000000;
$stack = [];
for ($i=1; $i<$repeatSize; $i++){
    array_push($stack, $i);
}
| VERSION | TIME | MEMORY | MEMORY | PEAK | 
|---|---|---|---|---|
| 5.6 | 1.02760887146 | 442236928 | 442236928 | |
| 7 | 0.335608959198 | 136318976 | 136318976 | 
Чтение: Link to heading
<?php
$repeatSize = 3000000;
$stack = [];
for ($i=1; $i<$repeatSize; $i++){
    array_push($stack, $i);
}
//start timer
while(array_pop($stack));
| VERSION | TIME | MEMORY | MEMORY PEAK | 
|---|---|---|---|
| 5.6 | 0.64272403717041 | 35127296 | 442236928 | 
| 7 | 0.15626287460327 | 136318976 | 136318976 | 
SPL Link to heading
Запись: Link to heading
<?php
$repeatSize = 3000000;
$stack = new SplStack();
for ($i=1; $i<$repeatSize; $i++){
    $stack->push($i);
}
| VERSION | TIME | MEMORY | MEMORY PEAK | 
|---|---|---|---|
| 5.6 | 0.79542207717896 | 288358400 | 288358400 | 
| 7 | 0.38693308830261 | 121634816 | 121634816 | 
Чтение: Link to heading
<?
$repeatSize = 3000000;
$stack = new SplStack();
for ($i=1; $i<$repeatSize; $i++){
    $stack->push($i);
}
//start timer
try {
    while ($stack->pop());
} catch (RuntimeException $e) {}
| VERSION | TIME | MEMORY | MEMORY PEAK | 
|---|---|---|---|
| 5.6 | 0.46781802177429 | 1310720 | 288358400 | 
| 7 | 0.14629602432251 | 121634816 | 121634816 |