У меня был раздел в классе, который я решил разбить на новый.
Когда я портировал раздел кода в новый класс, я заметил, что он был значительно медленнее при выполнении одного из циклов foreach.
Мне удалось отследить часть проблемы, чтобы решить, как я решил сохранить окончательный массив результатов.
Я думаю, будет легче понять, если вы увидите сокращенную версию моего кода:
Исходный портированный код: http://pastebin.com/2iBuqmgn Более оптимизированный портированный код: http://pastebin.com/TYU1rHwU
Вы увидите, что в первом примере я манипулирую $ this-> active_topics непосредственно во всех проходах.
Хотя во втором примере я использую локальные переменные, прежде чем сохранить локальную переменную в $ this-> active_topics ПОСЛЕ цикла foreach.
С исходным циклом, казалось, было среднее значение до 1 секунды, в то время как более оптимизированный один использовал 0,85 для выполнения в среднем. Они в конечном итоге возвращают точно такой же контент.
Почему более оптимизированный код с использованием локальных переменных более эффективен?
Когда вы получаете доступ к чему-то в классе, PHP-интерпретатор сначала должен найти класс в памяти, а затем посмотреть, где находится атрибут. В простой локальной переменной ему не нужно искать атрибут внутри класса, он может просто получить доступ к памяти переменной напрямую и, следовательно, немного быстрее.