• Блог
  • Операции инкремента

Ещё один эксперимент на скорость. В этот раз в качестве подопытных выступают операторы инкремента и декремента. Интерес возник после прочтения статьи «Инкремент в PHP». В ней тесты проводились на PHP5. Я же буду тестировать на PHP7. Для этого я создам тестовый сайт на modhost.pro.

Давайте разберём, что это за операторы. Вот список операторов инкремента:

  • Операция унарного инкрементирования — $var++.
  • Операция добавления присваивания — $var += 1.
  • Операция стандартного добавления — $var = $var + 1.

Аналогично будет выглядеть и список операторов декремента.

Скрипт

<?php

$times = 1000000;

#1 $var++
$tstart= microtime(true);
$result = 0;
for ($i=0; $i<=$times; $i++) {
    $result++;
}
echo number_format(microtime(true) - $tstart, 10), ': $var++' ,"<br>";

#2 $var += 1
$tstart= microtime(true);
$result = 0;
for ($i=0; $i<=$times; $i++) {
    $result += 1;
}
echo number_format(microtime(true) - $tstart, 10), ': $var += 1' ,"<br>";

#3 $var = $var + 1
$tstart= microtime(true);
$result = 0;
for ($i=0; $i<=$times; $i++) {
    $result = $result + 1;
}
echo number_format(microtime(true) - $tstart, 10), ': $var = $var + 1' ,"<br>";

Результат

0.0067329407: $var++             // Операция унарного инкрементирования
0.0090949535: $var += 1          // Операция добавления присваивания
0.0090889931: $var = $var + 1    // Операция стандартного добавления

Операция унарного инкрементирования самая быстрая. Хотя в статье нас убеждают, что самая быстрая операция стандартного добавления(третья). Но вот что удивительно, у меня на локалке (PHP7.1, Windows) результат совсем другой.

0.2700159550: $var++
0.2550139427: $var += 1
0.2900171280: $var = $var + 1

Самой быстрой оказалась операция добавления присваивания, т.е. вторая. Но, думаю, эти «локальные» результаты менее достоверны, чем результаты с модхоста, так как у меня окружение меньше подходит для сайтов из-за Windows. В связи с этим я решил заново протестировать циклы из предыдущей статьи, но уже на modhost.pro.

0   244

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.