February 12th, 2013

old rover

Лабиринт

Среди достопримечательностей Праги на холме Petřín (Петршин), которые обязательно должны хотя бы по одному разу посетить туристы, относятся фуникулёр, лабиринт и уменьшенная копия башни Эйфеля. На башню мы с Ленкой уже поднимались летом. Зимой там делать нечего, я думаю. Жуткая холодина, пронизывающий ветер, и закрытые окна с грязными стёклами - вот что ждёт туристов наверху. Летом же мы так и не воспользовались фуникулёром и топали по холму наверх ногами. В этот раз народу было немного, и мы решили подняться наверх на фуникулёре, тем более что на нём действуют обычные проездные билеты, как в метро, трамвае и автобусах.


Эти точечки белые - это не мусор, а снег идёт.

Пассажиров было немного, все туристы - несколько русских, и толпа англоговорящих студентов. Особенно там фотографировать, честно говоря, нечего. Если подниматься пешком, то открываются гораздо более красивые и фотогеничные виды.



У одной студентки в экстремально коротких джинсовых шортах, надетых на красные колготки крупной сеточкой (и это в -4°C) колготки на жопе порвались и я больше рассматривал их, чем смотрел в окно. Ну, во общем, поднялись наверх.


Collapse )
old rover

Что быстрее - sizeof() или count()

В среде программистов на PHP, особенно не очень опытных, имеется легенда о том, что sizeof() и count() - на самом деле разные функции, несмотря на то, что написано в мануале, и на маленьких массивах одна быстрее, а на больших - другая. Я решил положить конец этим бредням и убедить себя в том, что это одна и та же функция, и полез копаться в исходниках PHP. Исходный код функции count() я нашёл быстро, а вот sizeof() - не нашёл :(

Поэтому решить этот вопрос я додумался тупо в лоб (как обычно решают все вопросы PHP-программисты - я написал speed-тест.
<?php

define('ARSIZE', (int)$argv[1] ? (int)$argv[1] : 10);

$sum = 0;
$a   = array();
for($i = 0; $i < 1000; $i++)
{
    $start = microtime(true);
    for($j = 0; $j < ARSIZE; $j++)
    {
        $a[$j] = sizeof($a);
    }
    $sum += microtime(true) - $start;
}
echo 'sizeof median time '.round($sum / 1000, 6)."\n";

$sum = 0;
$a   = array();
for($i = 0; $i < 1000; $i++)
{
    $start = microtime(true);
    for($j = 0; $j < ARSIZE; $j++)
    {
        $a[$j] = count($a);
    }
    $sum += microtime(true) - $start;
}
echo 'count median time '.round($sum / 1000, 6)."\n";

?>
Версия PHP 5.4.4, версия ОС Linux 3.2.0 Linux Mint Debian i686 (то есть 32-битная архитектура). Процессор Intel Pentium T2080, тактовая частота 1.73 ГГц (это мой ноутбук). Результат выполнения теста:

$ php test.php 100
sizeof median time 5.0E-5
count median time 4.9E-5

$ php test.php 1000
sizeof median time 0.000474
count median time 0.000479

$ php test.php 5000
sizeof median time 0.002369
count median time 0.002373

$ php test.php 10000
sizeof median time 0.004776
count median time 0.004777

$ php test.php 20000
sizeof median time 0.009542
count median time 0.009572

$ php test.php 50000
sizeof median time 0.023856
count median time 0.023878
Как видите, скорость выполнения одна и та же. Так что использовать sizeof() или count() - только дело вкуса. Мне то внешне нравится, как написано sizeof, тут и буква s такая красивая, и f тоже неплохая, и даже z присутствует в середине, придавая особый смак. Поэтому я пользуюсь sizeof().

Оригинал записи http://blog.axshavan.ru/2013/02/what-is-faster-sizeof-count.html
  • Current Music
    Аквариум - Вперёд, бодхисаттва
  • Tags