Головна PHP Оптимізація скрипта - "правильний PHP"
Оптимізація скрипта - "правильний PHP"

Напевно кожен php-програміст коли вчився простому і правильному написанню коду в когось, або важко і нудно пізнавав на власному досвіді, постійно переробляючи одне і теж. Дана стаття покликана допомогти початківцям PHP-програмістам грамотно і ефективно використовувати ресурси веб-сервера-сервера і краще організувати логіку роботи свого скрипта.


0. При вставці кусків php-коду в HTML сторінки завжди використовуйте повні відкриваючі і закриваючі теги! Це забезпечить Вас від варіацій налаштування php.ini short_open_tag на різних серверах.

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

Погано:

 

sprintf('мама');
printf('тато');

Добре:
echo 'мама';
echo "тато";


2. По тих же причинах використовуйте одинарні лапки там де це можливо і користуйтеся оператором "." для склеювання рядків, замість прямої підстановки змінних в рядок, взятих в лапки.

Кращий варіант (самий швидкий):
echo 'Вага рівна: '.$weight;


Гірший варіант (повільний):
echo "Вага рівна: $weight";


3. Якщо Вам потрібно перевірити чи не рівне повернене значення функції нулю(а функція сама по собі повертає лише позитивні або лише негативні значення), то краще використовувати оператора порівняння. Він виконується швидше, ніж конкретне порівняння значень.

Погано:
$i = 0;
if ($i != 0)
{
//Не рівне
}
else
{
//Рівно
}


Добре:
$i = 0;
if ($i > 0)
{
//Не рівне
}
else
{
//Рівно
}


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

4. Для перевірки рядка на пустоту використовуйте функцію trim($str); Вона не лише перевірить чи заповнений рядок, але також обріже неістотні символи - пропуски (табуляції, white-spaces) і поверне позитивне значення, у випадку якщо в рядку є якісь значимі символи.

Погано:
if ($str != '')
{
//обробка строки
}

Треба:
if (trim($str))
{
//обробка строки
}

5. Для отримання даних з форм методом Get і Post краще використовувати такі самописні функції:
GetParam ($array, $value, $default = '')

{
return (isset($array[$value])) ? $array[$value] : $default;
}

GetParamSafe ($array, $value, $default = '')
{
return (isset($array[$value])) ? addslashes($array[$value]) : $default;
}


Функція GetParam($_POST, 'myvar', 'empty') коректно отримає дані з $_POST['myvar'], і у випадку якщо $_POST змінна не існує, поверне значення по замовчуванні, без всяких Waring и Notice. Фунція GetParamSafe($_POST, 'myvar', 'empty') працює так само, тільки повертає екрановану змінну (для захисту від SQL-інєкцій). А дана конструкція дозволяє отримати цілочисельне число з $_POST.
intval(GetParam($_POST, 'myvar', 'empty'))

У випадку якщо в масиві $_POST лежало не число, функія поверне 0;

6. Для простого порівняння строк не використовуйте preg_match() або preg_match_all(). Використовуйте strstr() і strpos().

7. При отриманні строк з бази даних (наприклад MySQL) старайтесь використовувати функцію mysql_fetch_object. Наприклад при зміні коду запиту з
$query = "SELECT field7, field3 FROM mytable WHERE id = 5"
на
$query = "SELECT * FROM mytable WHERE id = 5"
код виводу строки отриманої з цього запиту
$row = mysql_fetch_array(mysql_query($query));
echo $row[0].'-->'.$row[1]; //перестане працювати, в той час, як

$row = mysql_fetch_object(mysql_query($query));
echo $row->field7.'-->'.$row->field3; // залишиться робочим



8. При використанні сесій для авторизації на сайті, зберігайте хоча-б IP-адресу, з якої був здійснений вхід. Також перевіряйте IP входу з теперішнім IP адресом кожний раз при закритті скрипта. Наприклад, якщо "шпіону" вдасться викрасти назву сесії, то увійти в закриту зону він вже не зможе, тому що в нього буде інший IP-адрес (не завжди).

9. При формуванні великих запитів вставки даних в БД через insert всі строчки старайтесь помістити в один-три insert'а (так швидше працює Ваш скрипт).

10. У випадку якщо необхідно в різних місцях (різних класах) однієї системи використовувати одні й ті-ж дані, старайтесь їх зберігати глобально для всієї системи і передавати в клас один раз при створенні класу.

11. При великих навантаженнях на Web-сервер задумайтесь над включенням кешу(кеш-технології). Наприклад безкоштовний PHP-клас JCache_Lite_Function.

12. При проектуванні/розробці великих систем, віддавайте перевагу ООП з виикористанням шаблонів проектування (MVC, PageController, BodyHandler, Fabric...).

 

 

Коментарі  

 
0 #1 profile2566 01.11.2018 16:49
Need cheap hosting? Try webhosting1st, just $10 for an year.

http://www.voetbalgek.info/images/photos/666/1/b4a9c19c5e3663f9b6565d0f.jpg
Цитувати
 

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


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

© 2008-2013 PHPist