WordPress как на ладони
wordpress jino

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

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

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

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

2
campusboy1948 2.7 года назад
  • 2
    Kama4639

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

    /**
     * Считает время выполнения кода.
     *
     * Для включения подсчета, просто вызываем функцию.
     * Для остановки подсчета указываем 'stop' в первом параметре.
     * Для повторного включения, опять вызываем.
     * Для получения результата подсчета указываем 'end' в первом параметре.
     * 
     * @param (строка) $phase Включение/отключение/вывод (start/stop/end) посчитанного времени.
     * @return (строка) Пр: 0.03654 сек.
     *
     * пример использования:
    	exec_time(); // включаем подсчет
    	// код, который нужно учитывать
    	exec_time('stop'); // останавливаем
    	// код который не нужно учитывать
    	exec_time(); // продолжаем считать
    	// код, который нужно учитывать
    	echo exec_time('end'); // выведет 0.03654 сек.
     *
     */
    function exec_time( $phase = 'start' ){
    	static $time_before, $collect;
    
    	$n = 5; // знаков после запятой
    
    	$t = explode(' ', microtime() );
    	$time  = $t[1] . substr( $t[0], 1 );
    
    	if( $phase != 'stop' && $time_before ){
    		$difference = bcsub( $time, $time_before, $n ); // разница в сек.
    		$collect    = bcadd( $difference, $collect, $n );
    	}
    
    	if( $phase == 'end' ) return $collect . ' сек.';
    	else $time_before = $time;
    }

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

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

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

    campusboy 2.7 года назад

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

    Kama 2.7 года назад

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

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