Экспериментируя и изучая ньюнасы php я наткнулся на интересный баг с временем выполнения операций, который, возможно, поставит под сомнения некоторые вычисления.
Версия php у меня: 5.2.6-2ubuntu4.1
Сразу же привожу код, а уже затем обьясняю, что именно за баг проявился
Файл array.php
Файл index.php
Итак, Different в таком случае составляет 4-5%, то есть, $Array->shuffle() выполняется на 4-5% дольше, чем shuffle($array). Вполне логично, правда?
Теперь ищем в коде пометку /* LABEL 1a */, комментируем строку после нее и разкомментируем строку после /* LABEL 1b */ и комментируем строчку после /* LABEL 3 */. Фактически, эти действия производятся вне блоков, в которых засекается время. Кроме добавления строчки /* LABEL 1b */. Итак, проверяем… Хм… разница уменьшилась до 2-3%, то есть, $Array->shuffle() выполняется всего лишь на 2-3% дольше, чем shuffle($array). Ну допустим…
А теперь самое интересное. После всего этого комментируем строчку после /* LABEL 2 */
Теперь Different равно -20-25%! Обратите внимание на минус! то есть, $Array->shuffle() выполняется на 25% быстрее!!, чем shuffle($array), что есть маразм.
И разное для любопытный. Вернемся в изначальное состояние и попробуем уменьшать знаечение переменной $label2.
Если поставим $label2=500, то результат снизится с 4-5% до 2-3%. И раз в 5-10 обновлений наблюдаются скачки к значению "-5%"
Если поставим $label2=250, то результат будет в районе (минус) 5-10%
Если поставим $label2=100, то результат будет в районе (минус) 15-20%
Теперь давайте сократим файл index.php
Файл short.php
Результат — около -25%. То есть $array_new->shuffle() выполняется на 25% быстрее shuffle($array_old) Маразм?
Меняем местами LABEL 1 и LABEL 2
Результат — около 25%. То есть shuffle($array_old) выполняется на 25% быстрее $array_new->shuffle() Ээмс… А тест на одну строчку выше? О.о
То есть, в данном примере мы видим, то из "$array_new->shuffle()" и «shuffle($array_old)» выполнится быстрее та, которая позже вызвана.
Потому всегда, выкладывая статистику на php следует для експеримента поменять местами блоки. Вдруг они покажут совершенно противоположные вещи?
Версия php у меня: 5.2.6-2ubuntu4.1
Сразу же привожу код, а уже затем обьясняю, что именно за баг проявился
Файл array.php
Файл index.php
Итак, Different в таком случае составляет 4-5%, то есть, $Array->shuffle() выполняется на 4-5% дольше, чем shuffle($array). Вполне логично, правда?
Теперь ищем в коде пометку /* LABEL 1a */, комментируем строку после нее и разкомментируем строку после /* LABEL 1b */ и комментируем строчку после /* LABEL 3 */. Фактически, эти действия производятся вне блоков, в которых засекается время. Кроме добавления строчки /* LABEL 1b */. Итак, проверяем… Хм… разница уменьшилась до 2-3%, то есть, $Array->shuffle() выполняется всего лишь на 2-3% дольше, чем shuffle($array). Ну допустим…
А теперь самое интересное. После всего этого комментируем строчку после /* LABEL 2 */
Теперь Different равно -20-25%! Обратите внимание на минус! то есть, $Array->shuffle() выполняется на 25% быстрее!!, чем shuffle($array), что есть маразм.
И разное для любопытный. Вернемся в изначальное состояние и попробуем уменьшать знаечение переменной $label2.
Если поставим $label2=500, то результат снизится с 4-5% до 2-3%. И раз в 5-10 обновлений наблюдаются скачки к значению "-5%"
Если поставим $label2=250, то результат будет в районе (минус) 5-10%
Если поставим $label2=100, то результат будет в районе (минус) 15-20%
Теперь давайте сократим файл index.php
Файл short.php
Результат — около -25%. То есть $array_new->shuffle() выполняется на 25% быстрее shuffle($array_old) Маразм?
Меняем местами LABEL 1 и LABEL 2
Результат — около 25%. То есть shuffle($array_old) выполняется на 25% быстрее $array_new->shuffle() Ээмс… А тест на одну строчку выше? О.о
То есть, в данном примере мы видим, то из "$array_new->shuffle()" и «shuffle($array_old)» выполнится быстрее та, которая позже вызвана.
Потому всегда, выкладывая статистику на php следует для експеримента поменять местами блоки. Вдруг они покажут совершенно противоположные вещи?