Що працює швидше yield, foreach, for
Використаємо функцію яка створить асоціативний масив на 10000000 випадкових цифр. А інша функція нехай у цьому масиві знайде число 2356.
Застосуємо три різні підходи і подивимось який скрипт: yield, foreach, for - швидше працює і скільки оперативної памяті він забере.
Щоб умови були однакові функція має шукати однакові неіснуючі числа в масиві, тобто будуть пройдені усі іттерації.
1. Генератори yield (1.3384 сек. : 111.43 KB)
function createRandomArray()
{
for ($i = 0; $i < 10000000; $i++) {
yield strval(mt_rand(12, 88));
}
}
function findNumber($array)
{
foreach ($array as $number) {
if ($number === "2356") {
return $number;
}
}
return null;
}
$array = createRandomArray();
$result = findNumber($array);
if ($result !== null) {
echo "Number 2356 found!";
} else {
echo "Number 2356 not found.";
}
2. Цикл foreach (0.7719 сек. : 514.11 MB):
function createRandomArray() {
$arr = array();
for ($i = 0; $i < 10000000; $i++) {
$arr[] = rand(12, 88);
}
return $arr;
}
function findNumber($arr) {
foreach ($arr as $num) {
if ($num == 2356) {
return true;
}
}
return false;
}
$randomArr = createRandomArray();
if (findNumber($randomArr)) {
echo "Знайдено число 2356 в масиві.";
} else {
echo "Число 2356 не знайдено в масиві.";
}
3. Цикл for (Час виконання: 1.0999 сек. : 514.11 MB)
function createRandomArray() {
$arr = array();
for ($i = 0; $i < 10000000; $i++) {
$arr[] = rand('12', '88');
}
return $arr;
}
function findNumber($arr) {
foreach ($arr as $num) {
if ($num == 2356) {
return true;
}
}
return false;
}
$randomArr = createRandomArray();
if (findNumber($randomArr)) {
echo "Знайдено число 2356 в масиві.";
} else {
echo "Число 2356 не знайдено в масиві.";
}
Отже:
по швидкості перше місце займає - foreach
по використаню оперативки Yield!
..Експеремент проводився щоб показати Важливість застосуванн Генераторів PHP які доступні з версії 5.5.
- Про генератори на ОФ. сайті