Вызов функции несколько раз или сохранение возвращенного значения, производительность

Во многих темах и фреймворках WordPress я нашел следующие строки кода:

<!--[if lt IE 7]><html <?php language_attributes(); ?> class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]-->
<!--[if IE 7]><html <?php language_attributes(); ?> class="no-js lt-ie9 lt-ie8"><![endif]-->
<!--[if IE 8]><html <?php language_attributes(); ?> class="no-js lt-ie9"><![endif]-->
<!--[if gt IE 8]><!--> <html <?php language_attributes(); ?> class="no-js"><!--<![endif]-->

Я заметил несколько звонков для language_attributes() который я считаю ненужным временем, потраченным даже на простую функцию, подобную этой, поэтому я использовал этот код:

<?php ob_start(); language_attributes(); $language_attributes = ob_get_clean(); ?>

<!--[if lt IE 7]><html <?php echo $language_attributes; ?> class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]-->
<!--[if IE 7]><html <?php echo $language_attributes; ?> class="no-js lt-ie9 lt-ie8"><![endif]-->
<!--[if IE 8]><html <?php echo $language_attributes; ?> class="no-js lt-ie9"><![endif]-->
<!--[if gt IE 8]><!--> <html <?php echo $language_attributes; ?> class="no-js"><!--<![endif]-->

<?php unset($language_attributes); ?>

чтобы не звонить language_attributes() несколько раз, но чем больше я вижу использование первого шаблона, тем больше я сомневаюсь в своем решении, поэтому я решил запросить мнение эксперта.

Итак, вот мои вопросы:

в более широком аспекте — не ограничиваясь этой конкретной функцией — если функция делает точное каждый раз

В чем преимущество многократного вызова функции перед сохранением возвращаемого значения?

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

0

Решение

Чтобы ответить на ваш вопрос так прямо, как я могу, это зависит. Делает ли функция каждый раз одно и то же с затратами на производительность? Функция кэшируется / возвращает легко вычисляемое значение, не затрагивая память? Будет ли он кэширован или иначе кэширован во время выполнения? Все это влияет на ваши решения о звонке.

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

Учитывая все вышесказанное, есть большая вероятность, что это преждевременная оптимизация, а не то, с чем вам следует подумать. рекомендую Зрелое руководство по оптимизации, который охватывает эту тему широко, и должен помочь вам на вашем пути.

1

Другие решения

Без следования запутанной цепочке кодов WordPress (я ненавижу WordPress) невозможно узнать. Фактический вызов функции, очевидно, добавляет время, хотя, вероятно, оно пренебрежимо мало, но в этом случае этот вызов функции выполняет как минимум два других вызова функции.

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

В общем, лучшая практика, особенно если вы не знаете, что делают все функции, было бы лучше вызвать его один раз. Если, конечно, существует возможность изменения возврата / результата между вызовами, и вам нужна разная информация.

Вы можете сделать это используя:

$language_attributes = get_bloginfo('language');

Или как это работает:

$language_attributes = str_replace('_', '-', get_locale());

Справочник по функциям / get bloginfo

1

По вопросам рекламы [email protected]