У меня теперь есть дело большое. Пригласили в крупный проект ведущим разработчиком. 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);
array_rand очень медленный если массив достаточно большой
ага, а array_keys очень быстрый, на это намекаешь?
А стоило бы проверить, прежде чем комментировать.
count массива — 20000
Памяти занято массивом — 6029312 байт
Занято обоими массивами — 16515072 байт
таймер «делаем массив» : 0.442 сек.
таймер «array_rand (100 раз)» : 0.285 сек.
таймер «array_keys (100 раз)» : 2.852 сек.
Так array_keys там вообще не нужен.
Не нужен? Ну так предложи свой вариант кода, который случайный ключ из массива возьмёт. Ключи, очевидно, не числовые. Типа вот:
$bonline=array(«a»=>»b»,»c»=>»d»,»e»=>»f»);
никак, я имел ввиду именно числовые индексы
если уже так нужно, можно один раз сделать array_keys и хранить массив в памяти
Угу. В глобалс.
ну зачем же так
function array_keys_cache($mas, $name) {
STATIC $cache = new array();
if(isset($cache[$name])) return $cache[$name];
return $cache[$name] = array_keys($mas);
}
Это я пошутил.
На странице нам индекс нужен один раз.
Я предложил вариант, который НЕ медленнее и который короче на одну строку и чуть проще для понимания.
Ты прикрутил самодельное кеширование. И из двух строк ты сделал 7 (+5 на функцию). И теперь начнёшь получать выигрыш в 2 миллисекунды (в лучшем случае) на каждой выборке, начиная с одиннадцатой. Если считаешь, что это разумнее, чем просто сказать «блин, я ступил, не догадался, что у нас массив ассоциативный», тогда ок. Просто соглашусь, что твой вариант лучше.
В проекте мемкеш используется, кстати.