Дело.

У меня теперь есть дело большое. Пригласили в крупный проект ведущим разработчиком. Symfony+propel, postgresql, memcache.
Не знаю, правда, критерий «крупности», сужу по обьёму аудитории. Взял месяц тестового срока просто разработчиком. В проекте разобраться.

За вчера узнал много всякого нового. Symfony для меня фреймворк новый. Кстати, намного серьёзнее выглядит, чем Cakephp. Серьёзнее — не значит лучше, это будет видно позже. ORM вообще не люблю.

Целый день потратил, что бы разобраться и стартануть всё это дело. Новый проект делается быстро, а вот стартануть имеющийся, желательно без изменений (их конечно, mercurial учтёт, но сливать изменения потом будет тяжело) быстро никак не получилось. Начная с того, что сразу ставил версию 1.2. А проект, оказывается, написан на 1.1. Всё, и ничего не сделаешь, часть плагинов ещё не портирована, не портировать же их самому. Да и на рабочем серве версию менять пока смысла нет.

Проект, кстати, нуждается в рефакторинге. Серьёзно в коде я пока не разобрался, вижу только короткие мелкие вещи. Например вот.

$bonline = array_keys($bonline);
$wannauser = $bonline[mt_rand(0, count($bonline)-1)];

Если кто сразу не понял, сделать то же можно вот так.

$wannauser=array_rand($bonline);

Комментарии (8) на “Дело.”

  1. Cude:

    array_rand очень медленный если массив достаточно большой

  2. Секрет:

    ага, а array_keys очень быстрый, на это намекаешь?
    А стоило бы проверить, прежде чем комментировать.

    count массива — 20000
    Памяти занято массивом — 6029312 байт
    Занято обоими массивами — 16515072 байт

    таймер «делаем массив» : 0.442 сек.
    таймер «array_rand (100 раз)» : 0.285 сек.
    таймер «array_keys (100 раз)» : 2.852 сек.

  3. Cude:

    Так array_keys там вообще не нужен.

  4. Секрет:

    Не нужен? Ну так предложи свой вариант кода, который случайный ключ из массива возьмёт. Ключи, очевидно, не числовые. Типа вот:
    $bonline=array(«a»=>»b»,»c»=>»d»,»e»=>»f»);

  5. Cude:

    никак, я имел ввиду именно числовые индексы
    если уже так нужно, можно один раз сделать array_keys и хранить массив в памяти

  6. Секрет:

    Угу. В глобалс.

  7. Cude:

    ну зачем же так :)

    function array_keys_cache($mas, $name) {
    STATIC $cache = new array();
    if(isset($cache[$name])) return $cache[$name];

    return $cache[$name] = array_keys($mas);
    }

  8. Секрет:

    Это я пошутил.

    На странице нам индекс нужен один раз.
    Я предложил вариант, который НЕ медленнее и который короче на одну строку и чуть проще для понимания.
    Ты прикрутил самодельное кеширование. И из двух строк ты сделал 7 (+5 на функцию). И теперь начнёшь получать выигрыш в 2 миллисекунды (в лучшем случае) на каждой выборке, начиная с одиннадцатой. Если считаешь, что это разумнее, чем просто сказать «блин, я ступил, не догадался, что у нас массив ассоциативный», тогда ок. Просто соглашусь, что твой вариант лучше.

    В проекте мемкеш используется, кстати.

Можно чего-нибудь сказануть.