WordPress как на ладони
Мощный и не дорогой хостинг от Fornex.com Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

Измерение скорости выполнения php скрипта

Хочу потестировать большинство функций WP (и не только), которые взаимозаменяемы.

Правда, столкнулся с проблемой. В интернете предлагают замерять с помощью микройтайм, взял я код. На голом php - полёт нормальный. Вставляю в WP (в хедер и в футер) - выдает баснословное количество секунд. Подскажи, как грамотнее всего замерять скорость выполнения (работы) скрипта PHP или отдельных фукнций.

Буду рад протестировать и предоставить результаты. Нужно только понять как можно быстро и правильно замерить время выполнения указанного PHP кода.

2
campusboy
3079
3.8 года назад
  • 3
    Kama7079

    Для измерения скорости я использую такой самопис:

    /**
     * Считает время выполнения PHP кода (в секундах).
     *
     * exec_time();
     * // код
     * echo exec_time('get') .' сек.'; //> 0.03654 сек.
     *
     * @param string $phase       get/getall/pause/clear
     *                            get    - получает разницу, между предыдущим вызовом функции.
     *                            getall - получает разницу, между первым вызовом функции (run).
     *                            pause  - временная остановка подсчета. exec_time() для продолжения.
     *                            clear  - полностью очищает результат. exec_time() для начала нового подсчета.
     * @param int    $round       До скольки знаков после запятой округлять результат.
     *
     * @return float Например 0.03654
     *
     * @ver: 3.3
     */
    function exec_time( $phase = 'run', $round = 6 ){
    	static $prev_time, $collect;
    
    	if( $phase === 'clear' )
    		return $collect = $prev_time = 0;
    
    	list( $usec, $sec ) = explode(' ', microtime() );
    	$microtime = bcadd( $usec, $sec, 8 );
    
    	if( $prev_time ){
    		$exectime = bcsub( $microtime, $prev_time, 8 ); // разница в сек.
    		$collect  = bcadd( $collect, $exectime, 8 );    // добавляем
    	}
    	$prev_time = $microtime;
    
    	if( $phase === 'pause' )
    		$prev_time = 0;
    
    	if( $phase === 'get' )
    		return round( $exectime, $round );
    
    	if( $phase === 'getall' )
    		return round( $collect, $round );
    }
    

    Если замеряете отдельные функции, которые по определению о-очень быстры, например: __(), то можно повторять выполнение для наглядности. Например, замерим работу __():

    exec_time();
    
    for( $i=1; $i<50000; $i++ ){
    	$r = __('Settings', 'default');
    }
    echo exec_time('get') .'сек.';
    
    // вернет: 0.51650 сек.

    П.С. Жду результатов тестов на этом сайте smile

    campusboy 3.8 года назад

    Спасибо большое smile Обязательно буду делиться, вот только куда выкладывать? И ещё ма-а-а-аленький вопросик: а память каким образом можно замерять? Для оптимизации, думаю, тоже немаловажный вопрос.

    Kama 3.8 года назад

    Насчет памяти точно не знаю, надо разобраться с этим... Сейчас немного не до этого. Но я буду иметь ввиду этот вопрос, чуть что отвечу здесь.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация