Отслеживайте время загрузки страницы и общее количество запросов в Zend Framework - PullRequest
0 голосов
/ 02 апреля 2012

Есть ли способ получить подсчет общего количества запросов, выполняемых на одной странице, и сколько времени потребовалось для создания этой страницы в Zend Framework?

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

Спасибо

Ответы [ 4 ]

3 голосов
/ 02 апреля 2012

Конечно, доступен инструмент Db Profiling, он называется Zend_Db_Profiler, и вы можете узнать, как его использовать, прочитав официальную документацию здесь: http://framework.zend.com/manual/en/zend.db.profiler.html#zend.db.profiler.using

По сути, вы должны сделать что-то вроде этого:

$db = Zend_Db_Table::getDefaultAdapter();
$profiler   = $db->getProfiler();
$totalTime  = $profiler->getTotalElapsedSecs();
$queryCount = $profiler->getTotalNumQueries();

Что касается общего времени загрузки вашей страницы, если вы не используете макеты, лучше создать базовый класс контроллера, который получает текущее (микро) время в течение predispatch и postDispatch.методы, то вы делаете его базовым классом для всех ваших контроллеров.Возможно, что-то подобное может сделать эту работу:

class Myapp_Controller_Action extends Zend_Controller_Action
{
  protected $_startTime;
  protected $_endTime;
  protected $_totalTime;

  public function preDispatch()
  {
    parent::preDispatch();
    $this->_startTime = microtime(true);
  }

  public function postDispatch()
  {
    parent::postDispatch();
    $this->_endTime = microtime(true);
    $this->_totalTime = $this->_endTime - $this->_startTime;
    // do something with $this->_totalTime;
  }
}

И каждый контроллер в вашем приложении должен расширять Myapp_Controller_Action вместо Zend_Controller_Action:

class IndexController extends Myapp_Controller_Action
{
  ...
}
2 голосов
/ 03 апреля 2012

Кроме того, вот совет для отладки.Конечно, это не будет применяться для регистрации.Вы можете использовать Zend_Db_Profiler + FireBug + FirePhp с Firefox, которые действительно очень хороши вместе: Конфигурация должна быть (я использую формат .ini, но может быть адаптирован кодом или XML):

database.params.profiler.enabled = true
database.params.profiler.class = Zend_Db_Profiler_Firebug

You 'Вы получите такой результат: общее время, проведенное в вашей базе данных (ы) + детализация запроса и время, потраченное (и необязательные параметры).Отлично каждый день пользуйтесь инструментами!

enter image description here

0 голосов
/ 02 апреля 2012

Вы можете подключиться к подключаемым модулям до и после отправки и зарегистрировать временные метки в таблице БД. На почте вы можете найти соответствующую печать перед отправкой и рассчитать общую сумму.

Для запросов самым простым способом, вероятно, было бы добавить оболочку к тому, что вы используете для выполнения запросов, и увеличивать статический счетчик в классе оболочки при каждом вызове метода запроса. В обработчике после отправки вы также можете записать это в БД.

Для написания плагинов, чтобы подать в суд на крючки до / после отправки, посмотрите http://devzone.zend.com/1224/front-controller-plugins-in-zend-framework/

Удачи.

0 голосов
/ 02 апреля 2012

Чтобы увидеть запросы, вы можете включить профилировщик вашего адаптера базы данных. Для этого вам нужно написать следующую строку, которая должна быть в начале вашего программного обеспечения:

$Db->getProfiler()->setEnabled(TRUE);

Конечно, $Db должен быть экземпляром вашего адаптера базы данных. Чтобы получить все запросы, которые вы можете сделать:

$Db->getProfiler()->getQueryProfiles()

Конечно, вы можете узнать больше о профилировщике из официального документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...