2013-12-07 4 views
4

Я тестирую свой PHP-код, чтобы попытаться выяснить, какие методы кодирования приводят к самому быстрому выполнению. Я хочу, в конечном счете, проверить весь мой PHP-код, который нуждается в тестировании, чтобы попытаться создать наиболее быстро исполняемый код, который я могу. Я начинаю с простым примером, на моей домашней странице, используя микропоры(), чтобы записать время до того, как INSERT выполняется оператор, и время после того, как он выполняет, а затем повторяя разницу следующим образом:Насколько точным является microtime()?

//Lots of code 
$microtime1 = microtime(); 
$sql1=("INSERT INTO Table (value1,value2,value3,value4,value5,value6,value7) VALUES 
('$value1','$value2', '$value3', '$value4', '$value5', '$value6', 'value7')"); 

if (mysqli_query($sql1)) { 
    $microtime2 = microtime(); 
    $Difference = $microtime2 - $microtime1; 
    echo "<SCRIPT> 
     alert('$Difference'); 
     location = 'home.php'; 
     </SCRIPT>"; 
} else { 
    $message = 'The site is having some technical difficulties. Please try again!"; 
    echo "<SCRIPT> 
     alert('$message'); 
     location = 'home.php'; 
     </SCRIPT>"; 
} 
//More code 

Более 10 испытаний , Я инициировал этот запрос, введя одну и ту же трехбуквенную строку ('ddd') в одно и то же текстовое поле ввода и нажав ту же кнопку (без каких-либо других пользователей, кроме меня), запись $ Разница каждый раз. Я удивляюсь тому, насколько велика разница в данных. Для этих 10 испытаний стандартное отклонение в $ Разница составляла 40% от среднего значения $ Разница. Есть ли лучший способ сделать это, о котором я не знаю? Или мне нужно будет выполнить 10-20 проб для каждой функции, чтобы получить полезную среднюю величину $ Разница для моего другого кода?

+0

что вы * на самом деле * пытаетесь достичь? Лучший способ сократить время запросов - уменьшить количество запросов, оптимизировать таблицы с индексами и оптимизировать запросы для использования этих индексов. То, что запросы различаются, может быть связано с многими вещами, но я сомневаюсь, что одна вставка - это что-то, о чем можно беспокоиться. Если вы выполняете тысячи вставок, вам лучше попытаться объединить их в один запрос. Кроме того, всегда рекомендуется использовать подготовленные операторы, особенно при повторении аналогичного запроса несколько раз с разными значениями. – Mike

+3

Чтобы ответить на ваш вопрос, микро-время является точным. Гораздо более вероятно, что запрос на самом деле составляет 40% от среднего. – Mike

+0

В дополнение к сокращению числа запросов и оптимизации запросов, я также пытаюсь написать наиболее быстро исполняемый код. Считаю это любопытством, так как я раньше был экспериментальным химиком :) Я относительно новичок в кодировании, но мне трудно полагать, что все алгоритмы создаются одинаково. Например, чтобы проверить, является ли строка членом массива, я могу использовать функцию in_array, или я могу использовать цикл foreach в сочетании с оператором сравнения, сравнивая каждый элемент массива со строкой, чтобы увидеть, есть ли точная совпадение. Я хотел бы, чтобы номер сказал мне, какой метод быстрее! –

ответ

3

Что вы говорите, это профилирование. Хотя можно «сворачивать свои собственные», (и вы на правильном пути в этом отношении), есть много полезных вещей, которые будут делать тяжелый подъем для вас.

Если вы хотите, вы всегда можете сделать то, что вы предложили, и сгладить отклонения, перейдя через несколько итераций ваших тестов, но если вы хотите всестороннее профилирование всего вашего PHP, я рекомендую ответ «xdebug» на этот вопрос : Simplest way to profile a PHP script

Это сработало для меня.

Смежные вопросы