Хороший мне проект достался.
Направленность эротическая. С утра сел поработать, пока никого в офисе нет. Через полчаса пришлось идти в соседнюю комнату, снимать со своей девушки трусики.
Но остаток дня ничего так, нормально поработал.
А ещё чем замечательный — 66 запросов к базе на страницу. Не везде, но вот как минимум в одном месте есть. На странице блогов.
Не выводится при этом ничего почти.
Инфа о юзере — 3 запроса (по таблицам раскидано).
Последние посты (глобально по проекту) — 3 запроса (посты, имя автора по id, количество комментариев).
Популярные записи — 1 запрос.
Это если не join-ить, иначе меньше.
Это так должно быть по уму. В реале на самом деле 66 запросов.
Однако берём и просто запоминаем результаты запросов в течении генерации одной страницы. Остаётся 43. То есть 23 запроса делаются для того, что бы получить из базы информацию, которую мы уже получали десятком строчек кода ранее.
Куда остальные 43 запроса? Например, посты селектятся по одному.
Впрочем, они не зря так селектятся. Инфа тупо складывается в кеш обьектов и повторно берётся уже оттуда. По прочим запросам я тоже прикрутил кеш (зачем делать кеш sql-запросов средствами php? Потому что у нас postgresql, она кешировать запросы не умеет), так что теперь при нажатии F5 всего 3 запроса. 2 делает sfPropelPager, что б посты по страницам выводить и один для количества комментариев, который сделан тупо через executeQuery();
Кстати, для кеширования запросов пришлось залезть в пропелевский генератор и его подправить. Т.к. там изначально сделано не очень дальновидно, а уж sfPropelBehavior вообще сделано через задницу. Перехватить запросы к базе в symfony вам нормально не удастся.
К слову, sfMemcacheCache тоже не понравился. Ощущение, что его забыли дописать.
Если кто решил, что я ругаю symfony — то зря. Не плохой фреймворк. Для крупного проекта, пожалуй, лучше, чем CakePHP. Последний — это просто обвязка. Хорошо сделанная обвязка. Symfony — сырая, но среда. Неплохие возможности по отладке. И ещё какие-то плюсы были, но я их забыл, пока копался в кишках этого фреймворка. А без кишков никак. Что б получить ответы на простейшие вопросы, например, почему у меня 404 ошибка не настраивается, приходится пролезать на пяток файлов внутрь /usr/share/php/symfony.
