Оптимизация PHP-приложений требует комплексного подхода. Рассмотрим ключевые аспекты повышения производительности от базовых до продвинутых техник.
// Вместо
if ($var == 1) {...}
// Используйте
if ($var === 1) {...}
Почему: Строгие сравнения (===) быстрее, так как не требуют преобразования типов.
// Медленно
for ($i = 0; $i < count($array); $i++) {...}
// Быстрее
$count = count($array);
for ($i = 0; $i < $count; $i++) {...}
// Еще лучше
foreach ($array as $value) {...}
function getExpensiveData() {
static $cache = null;
if ($cache === null) {
$cache = expensiveCalculation();
}
return $cache;
}
// Плохо
$users = $db->query("SELECT * FROM users");
while ($user = $users->fetch()) {
$posts = $db->query("SELECT * FROM posts WHERE user_id = " . $user['id']);
}
// Хорошо
$users = $db->query("
SELECT u.id, u.name, p.title
FROM users u
JOIN posts p ON p.user_id = u.id
");
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 ; В production
// Используйте генераторы для больших данных
function getLargeDataset() {
for ($i = 0; $i < 1000000; $i++) {
yield $i => processItem($i);
}
}
unset($largeArray); // Когда массив больше не нужен
gc_collect_cycles(); // При работе с циклическими ссылками
# Установка XHProf
pecl install xhprof
# Запуск профилирования
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
// Код для профилирования
$xhprof_data = xhprof_disable();
--optimize-autoloader
(-o)composer require --update-with-dependencies
{
"autoload": {
"psr-4": {
"App\\": "src/"
},
"files": [
"src/helpers.php"
]
}
}
// Вместо немедленной обработки
processImage($image);
// Добавьте в очередь
$queue->push(new ProcessImageJob($image));
$promises = [
$client->getAsync('http://example.com/1'),
$client->getAsync('http://example.com/2')
];
$results = GuzzleHttp\Promise\unwrap($promises);
realpath_cache_size=4096K
realpath_cache_ttl=600
max_execution_time=30 ; Для веб-скриптов
memory_limit=256M ; По необходимости
session.gc_probability=1
session.gc_divisor=100
оптимизация PHP-приложений требует комплексного подхода — от микрооптимизаций кода до грамотной настройки сервера. Начинайте с профилирования, выявляйте реальные узкие места, применяйте кэширование и правильно настраивайте окружение. Регулярно обновляйте PHP до актуальной версии для автоматического получения улучшений производительности.