2013-01-29 6 views
6

У меня был раздел в классе, который я решил разбить на новый.

Когда я портировал раздел кода в новый класс, я заметил, что он был значительно медленнее при выполнении одного из циклов foreach.

Мне удалось отследить часть проблемы, чтобы решить, как я решил сохранить окончательный массив результатов.

Я думаю, что это будет легче понять, если вы видите сокращенную версию моего кода:

Оригинальный портирован код: http://pastebin.com/2iBuqmgn Более оптимизированный портирован код: http://pastebin.com/TYU1rHwU

Вы увидите, что в в первом примере я манипулирую $ this-> active_topics прямо во всех проходах.

В то время как во втором примере я использую локальные переменные, прежде чем сохранять локальную переменную в $ this-> active_topics ПОСЛЕ цикла foreach.

С первоначальной петлей, казалось, было среднее значение до 1 секунды, в то время как более оптимизированная версия 0.85 выполнялась в среднем. Они в конечном итоге возвращают точно такой же контент.

Почему более оптимизированный код с использованием локальных переменных более эффективен?

ответ

12

Когда вы обращаетесь к чему-то в классе, PHP-интерпретатор должен сначала найти класс в памяти, а затем посмотреть, где находится атрибут. В простой локальной переменной ему не нужно искать атрибут внутри класса, он может просто получить доступ к памяти переменной напрямую и, следовательно, немного быстрее.

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

  • Нет связанных вопросов^_^