Сегодня рассмотрим структуры данных из стандартной библиотеки 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);
}
VERSIONTIMEMEMORYMEMORYPEAK
5.61.02760887146442236928442236928
70.335608959198136318976136318976

Чтение: Link to heading

<?php
$repeatSize = 3000000;
$stack = [];
for ($i=1; $i<$repeatSize; $i++){
    array_push($stack, $i);
}
//start timer
while(array_pop($stack));
VERSIONTIMEMEMORYMEMORY PEAK
5.60.6427240371704135127296442236928
70.15626287460327136318976136318976

SPL Link to heading

Запись: Link to heading

<?php
$repeatSize = 3000000;
$stack = new SplStack();
for ($i=1; $i<$repeatSize; $i++){
    $stack->push($i);
}
VERSIONTIMEMEMORYMEMORY PEAK
5.60.79542207717896288358400288358400
70.38693308830261121634816121634816

Чтение: 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) {}
VERSIONTIMEMEMORYMEMORY PEAK
5.60.467818021774291310720288358400
70.14629602432251121634816121634816