Intereting Posts
взаимодействие proc_open Как правильно добавить столбец shipping_description в сетке заказа magento? Вытягивание данных изображения BLOB из MySQL в PHP Artisan служит для отправки активов с включенными заголовками ответов Обнаружение мобильного браузера? Создание и сохранение XML-файла на сервере с использованием PHP Каково регулярное выражение для проверки международного номера телефона в php или zend? Регулярное выражение для удаления комментариев CSS Doctrine ищет строку в нескольких столбцах Ларный кэш с PHP Captcha для алгоритма защиты от сбоев APNS + PHP "stream_socket_client (): Не удалось включить криптографию" Чтение большого файла по строкам или сохранение его строк в массиве удаление элемента массива JSON в PHP и повторное кодирование как JSON Как я могу условно заменить токены в файле конфигурации с помощью Capistrano или Phing? WordPress – создание списка сообщений, отфильтрованных по тегу, а затем категории

Оптимизация сайтов, основанных на коханах, для скорости и масштабируемости

Вчера на сайте, который я построил с Коханой, раздалось огромное количество трафика, заставив меня сделать шаг назад и оценить часть дизайна. Мне любопытно, какие стандартные методы для оптимизации приложений на основе Коханы?

Меня тоже интересует бенчмаркинг. Нужно ли мне настраивать Benchmark::start() и Benchmark::stop() для каждого метода-контроллера, чтобы увидеть время выполнения для всех страниц, или я могу применить бенчмаркинг глобально и быстро?

Я буду использовать Cache-библиотеку больше времени, но я открыт для большего количества предложений, так как я уверен, что я могу многое сделать, чего я просто не знаю в настоящий момент.

Используйте XDebug и WinCacheGrind или WebCacheGrind для профилирования и анализа медленного выполнения кода.

WebCacheGrind http://jokke.dk/media/2008-webgrind/webgrind_small.png WinCacheGrind

Код профиля с 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) для некоторых других советов по производительности.

Строго связано с Коханой (вы, наверное, уже сделали это, или нет):

В режиме производства:

  1. Включите внутреннее кэширование (это будет только кэшировать результаты Kohana :: find_file, но это действительно может помочь.
  2. Отключить профилировщик

Просто мои 2 цента 🙂

Я полностью согласен с ответами XDebug и кэширования. Не заглядывайте в слой Kohana для оптимизации до тех пор, пока вы не определили свои самые большие узкие места в скорости и масштабе.

XDebug расскажет вам, что вы тратите большую часть своего времени и определяете «горячие точки» в своем коде. Сохраните эту информацию для профилирования, чтобы вы могли выполнить базовую оценку и измерить улучшения производительности.

Пример проблемы и решения. Если вы обнаружите, что каждый раз вы создаете дорогостоящие объекты из базы данных, которые не очень часто меняются, вы можете посмотреть на их кеширование с помощью memcached или другого механизма. Все эти исправления производительности требуют времени и сложности в вашей системе, поэтому будьте уверены в своих узких местах, прежде чем приступать к их исправлению.