2015-11-13 3 views
-2

Так что, если у меня есть следующий код:PHP Функции и эффективность сервера

<?php 
function someFunction() 
{ 
    //lots of lines of code 
} 

if ($someBooleanVariable) 
{ 
    //some random code 
} 
else 
{ 
    someFunction(); 
} 

?> 

Вопрос 1: я правильно предположить, что сервер будет сначала загрузить всю функцию, а затем, возможно, даже не использовать его ?

Вопрос 2: Если бы это было так, не часто ли было бы более эффективно размещать код функции внутри скобок «{}» после else в предыдущем коде? (предполагая, что код будет работать только один раз и не должен использоваться нигде).

Поскольку код будет загружаться и запускаться только в том случае, если «$ someBooleanVariable» был FALSE, я предполагаю, что сервер будет менее использоваться, если код не был в функции, а скорее в скобках после «else». Однако я основываю это на предположении, что сервер автоматически загружает функциональный код каждый раз, так как он находится в верхней части страницы, что может быть корнем вопроса.

+0

Вероятнее всего, вы потратили больше времени на ввод этого вопроса, чем сервер, который сэкономил бы за тысячу лет работы, оптимизируя это поведение. – ceejayoz

ответ

1

PHP должен анализировать файл WHOLE, создает из него некоторый байт-код, который представляет исходный код, а затем выполняет этот байт-код.

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

Как только это байт-код, путь выполнения может отличаться, т. Е. Функция может не вызываться, но я не вижу, что это делает что-то, кроме незначительных различий.

В целом, вы спрашиваете о микрооптимизации. Если вы можете написать код, который ясно докажет, что один подход лучше другого, и что различия в скорости значительны (т.е. они более чем на 10% быстрее), и что читаемость кода не намного хуже, у вас есть действующий случай ,

Я не думаю, что у вас есть действующий случай здесь. Функция будет анализироваться независимо от того, где она размещена, и выполняется только тогда, когда туда проходит путь кода.

+0

Стоит отметить, что определение функции внутри else {} означает, что оно не будет зарегистрировано для использования кодом до этой точки. Это может сэкономить неизмеримое количество обработки, если оно никогда не срабатывает. – rjdown

+1

Это относится к хорошим причинам для описания функций, отличных от фактического кода - это делает код более понятным и понятным для читателя, и это имеет первостепенное значение. Все остальное может быть оптимизировано двигателем. – Sven

+0

Абсолютно. Я бы сделал еще один шаг и использовал статические методы в вспомогательных классах вместо отдельных функций. Пусть автозагрузчик справится с этим :) – rjdown

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