Оптимизация PHP-кода: экономия на спичках

293
28 июля 2017, 03:23

Даст ли улучшение производительности ручной inline функций и замена include содержимым вызываемого файла?

index.php

<?php
function hw() {
    echo 'Hello world!';
}
hw();
include('file.php');
?>

file.php

<?php
echo 'Something text...';
?>

Это можно преобразовать в следующее:

<?php
echo 'Hello world!';
echo 'Something text...';
?>

Вопросы: будет ли прирост производительности? Существуют ли программы для автоматической оптимизации скриптов таким способом?

Answer 1

Проблема в том, что этот синтетический тест ничего нового нам не скажет. Со временем первый вариант с 1 файлом превратится в вермишель из кода, который будет трудно поддерживать, а второй будет более читабельным и ради этого стоит экономить 0.00024676322937011s?

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

Если вам нужно ускорить php код, можно использовать HHVM, транслятор от Faсebook, который транслирует php код в код на С++, Doc: https://docs.hhvm.com/, и src: https://github.com/facebook/hhvm

Первый вариант:

$a = microtime(true);
function hw() {
    echo 'Hello world!';
}
hw();
include('file.php');
printf(PHP_EOL."%.16f".PHP_EOL, microtime(true)-$a);

Время: 0.00040197372436523

Второй вариант:

$a = microtime(true);

echo 'Hello world!';
echo 'Something text...';

printf(PHP_EOL."%.16f".PHP_EOL, microtime(true)-$a);

Время: 0.00015521049499512

Answer 2

Будет ли прирост производительности?

Да, это называется инлайнингом. Вызов любой подпрограммы (на каком бы языке вы не писали) всегда требует накладные расходы - прыжки непосредственно по коду, работу со стэком и прочее. Тем не менее, эти расходы практически не имеют особого значения для PHP, потому что он сам по себе достаточно тяжел и его не имеет смысла использовать там, где критична производительность, большую часть времени PHP, как правило, тратит не на работу прцоессора и работу с памятью, а на I/O. В вашем случае куда больше пользы принесет оптимизация БД и работы с ней.

Непосредственно инлайн файла выглядит куда более интересным, однако кэш операционной системы и opcache все равно прокэшируют его после первой загрузки, поэтому дальше плясать нет смысла.

Существуют ли программы для автоматической оптимизации скриптов таким способом?

Для PHP - нет, и вряд ли будут из-за их ненужности. По-хорошему заниматься этим все равно должен компилятор, но из-за динамической типизации языка это вряд ли возможно осуществить достаточно эффективно.

READ ALSO
Выбор СУБД для большого проекта [требует правки]

Выбор СУБД для большого проекта [требует правки]

Здравствуйте дорогие друзьяСобственно надо сделать веб (браузерную) программу для большой организации где за один только сезон т е год может...

253
Как можно отправить личные сообщения в facebook и ok.ru с помощью cURL php?

Как можно отправить личные сообщения в facebook и ok.ru с помощью cURL php?

Надо реализовать в интернет-магазине оповещение по соцсетям людей о доставке заказа в пункт выдачи

323
Не работает MongoDB

Не работает MongoDB

Установил MongoDB по гайду на DigitalOceanЗатем сделал pecl install mongodb и добавил extension=mongodb

238