Головна PHP Тест швидкодії та оптимізація коду PHP
Тест швидкодії та оптимізація коду PHP

Важливо оптимізовувати код PHP, особливо якщо мова йде про великий проект. Спершу різниця не помітна, незважаючи як ви написали свій код, але коли кількість відвідувачів зростає, всі неоптимізовані ділянки коду дають про себе знати.

 

Але в будь-якому випадку, найкраще починати оптимізовувати свій код безпосередньо від початку розробки проекта, і намагатись якомога "полегшити" та "прискорити" його роботу. Скрипт, який виконується лише за 0,01 секунди не здається повільним, але якщо це значення помножити на 8000 відвідувачів, тоді серверу буде потрібно 80 секунд на вивід результатів всім користувачам.

Тест швидкодії

На практиці, пошук ділянки коду який сповільнює роботу скрипта, є одним з найскладніших моментів при роботі з оптимізацією коду. Пошук в невірних місцях, може забрати надто багато часу.

Найпростіший спосіб пошуку проблемної ділянки, це закоментувати всі рядки скрипта, та розкоментовувати їх один за одним. Коли завантаження сторінки сповільниться, отже ви найшли потрібний фрагмент.

Але іноді цього недостатньо, і вам потрібно знати скільки саме часу займає виконання того чи іншого фрагменту коду. Другий спосіб полягає в тому, щоб розділити скрипт на умовні секції та визначити їх час завантаження, тоді таким чином ми знатимемо яка секція є найпроблемнішою і скільки часу потрібно на її виконання. Але якщо і цього не досить можна встановити секундомір до кожної функції, чи навіть кожного рядка.

Для цих потреб можна використовувати наступну функцію:

function getTime() {
$timer = explode( ' ', microtime() );
$timer = $timer[1] + $timer[0];
return $timer;
}

А в самому коді викликати її за необхідністю:

$start = getTime();
$aUsers = $wms->getUsers( 0, $showType, true, ($_REQUEST['page']*$perPage), $perPage );
$end = getTime();
echo '$wms->getUsers() зайняло: '.round($end - $start,4).' секунд';

В першому рядку, початковий час зберігається в змінній $start. Потім ми виконуємо деякі дії і після цього записуємо кінцевий час до $end. І в кінці виводимо скільки часу зайняло виконання нашого коду. На випадок, якщо ви хочите проаналізувати діючий сайт, вивід можна зробити або до бази данних або у файл і т.д..

Оптимізація

Тепер, коли ви визначили проблемні місця, ви можете оптимізувати їх. Хочу навести список деяких можливих оптимізацій:
Використовуйте статичні методи, завжди коли це можливо, вони в 4 рази швидші за динамічні
Echo є швидшим за print
Використовуйте , замість . для об'єднання рядків
Визначайте максимальне значення для циклів for() перед циклом а не в його умові:

$max = count($array);
for ($i=0;$i<$max;$i++) {
echo $i;
}

– Ресетуйте значення змінних, щоб спорожнити пам'ять (особливо коли річ йде про масиви)
– Використовуйте повний шлях в include() і require(), щоб сервер не шукав цей шлях для вас
– Використовуйте strncasecmp, strpbrk і stripos замість regex
– Пересікання помилок через @ є дуже повільним
– Закривайте з'єднання з базою даних, якщо воно вам більше не потрібне
– $row['id'] в 7 разів швидше від $row[id]
– Заміна значення глобальної змінної в 2 рази повільніша від зміни локальної змінної
– Виділяйте рядки одинарними лапками (') замість двійних (") це швидше, так як PHP шукає змінні в "..." а в '...' ні
– PHP скрипти від 2 до 20 разів повільніші за звичайний HTML. Використовуйте статичні HTML сторінки завжди коли це можливо
– PHP скрипти компілюються кожного разу, коли до них звертаються. Використовуйте ПО для кешування і отримаєте приріст швидкодії від 25% до 100%.
– $i++ повільніше за ++$i
– Не завжди використання ООП виправдовує себе. В більшості випадків структура ООП надто "важка", тому використовуйте її розумно
– По мірі можливостей, використовуйте тільки стандартні функції PHP, не потрібно винаходити колесо заново

 

 

Коментарі  

 
0 #1 KOPIHb 24.04.2012 11:39
+5 менi сподобалась стаття
Цитувати
 

Додати коментар


Захисний код
Оновити

© 2008-2013 PHPist