Вчера на сайте, который я построил с Коханой, раздалось огромное количество трафика, заставив меня сделать шаг назад и оценить часть дизайна. Мне любопытно, какие стандартные методы для оптимизации приложений на основе Коханы?
Меня тоже интересует бенчмаркинг. Нужно ли мне настраивать Benchmark::start()
и Benchmark::stop()
для каждого метода-контроллера, чтобы увидеть время выполнения для всех страниц, или я могу применить бенчмаркинг глобально и быстро?
Я буду использовать Cache-библиотеку больше времени, но я открыт для большего количества предложений, так как я уверен, что я могу многое сделать, чего я просто не знаю в настоящий момент.
Используйте XDebug и WinCacheGrind или WebCacheGrind для профилирования и анализа медленного выполнения кода.
WebCacheGrind http://jokke.dk/media/2008-webgrind/webgrind_small.png
Код профиля с XDebug .
Используйте много кеширования. Если ваши страницы относительно статичны, то обратный прокси-сервер может быть лучшим способом сделать это.
Kohana очень быстро работает, за исключением использования объектов базы данных. Процитировать Zombor «Вы можете уменьшить использование памяти, гарантируя, что вы используете объект результата базы данных вместо массивов результатов». Это делает разницу в производительности HUGEE на сайте, который захлопнулся. Он не только использует больше памяти, но и замедляет выполнение скриптов.
Также – вы должны использовать кеширование. Я предпочитаю memcache и использую его в своих моделях следующим образом:
public function get($e_id) { $event_data = $this->cache->get('event_get_'.$e_id.Kohana::config('config.site_domain')); if ($event_data === NULL) { $this->db_slave ->select('e_id,e_name') ->from('Events') ->where('e_id', $e_id); $result = $this->db_slave->get(); $event_data = ($result->count() ==1)? $result->current() : FALSE; $this->cache->set('event_get_'.$e_id.Kohana::config('config.site_domain'), $event_data, NULL, 300); // 5 minutes } return $event_data; }
Это также значительно увеличит производительность. Вышеуказанные два метода улучшили производительность сайтов на 80%.
Если бы вы дали более подробную информацию о том, где вы думаете, что такое узкое место, я уверен, что мы могли бы дать несколько лучших идей.
Также проверьте yslow (google it) для некоторых других советов по производительности.
Строго связано с Коханой (вы, наверное, уже сделали это, или нет):
В режиме производства:
Просто мои 2 цента 🙂
Я полностью согласен с ответами XDebug и кэширования. Не заглядывайте в слой Kohana для оптимизации до тех пор, пока вы не определили свои самые большие узкие места в скорости и масштабе.
XDebug расскажет вам, что вы тратите большую часть своего времени и определяете «горячие точки» в своем коде. Сохраните эту информацию для профилирования, чтобы вы могли выполнить базовую оценку и измерить улучшения производительности.
Пример проблемы и решения. Если вы обнаружите, что каждый раз вы создаете дорогостоящие объекты из базы данных, которые не очень часто меняются, вы можете посмотреть на их кеширование с помощью memcached или другого механизма. Все эти исправления производительности требуют времени и сложности в вашей системе, поэтому будьте уверены в своих узких местах, прежде чем приступать к их исправлению.