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