Объекты PHP по сравнению с Массивами — Сравнение производительности при итерации

Если я правильно прочитал ваш пост, вы уже очистили файл .bash_profile, поэтому осталось только запустить

unset DB_USER DB_PASS

в каждом окне оболочки, в котором все еще есть переменные среды.

83
задан mickmackusa 27 June 2019 в 06:56
поделиться

3 ответа

Для кого-либо, кто все еще интересуется этим вопросом :) Я выполнил код Quazzle Ubuntu x64 PHP 7.1 и получил этот ответ:

arrays: 0.24848890304565

memory: 444920

Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.23238587379456

memory: 164512

SomeClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.24422693252563

memory: 484416

stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

Массив Заключения

берут 4 (!) память, чем объект класса.
Объект класса незначительно быстрее.
stdClass, все еще злой В© magallanes :)

1
ответ дан 24 November 2019 в 08:58
поделиться

Вы не показали нам код того, как работает $ object-> value , поскольку это могло быть array, и в этом случае теоретически использование массива будет быстрее, поскольку требует на один вызов функции меньше. Стоимость поиска, вероятно, будет огромной по сравнению с вызовом функции. Если это переменная, будет очень мало различий, поскольку объекты и массивы в PHP имеют очень похожую реализацию.

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

2
ответ дан 24 November 2019 в 08:58
поделиться

Вы всегда можете проверить исходный код PHP на наличие подобных микропроизводительных функций.

Но на первый взгляд, никакое выполнение ['value'] не будет быстрее, потому что PHP должен выполнить поиск, где найти ['value'], даже если поиск по хеш-таблице должен быть O (1), это не гарантировано. При использовании Text-index накладные расходы больше.

Если объект содержит только 1 переменную, к которой вам нужно получить доступ, а именно значение, использование объекта увеличивает накладные расходы.

1
ответ дан 24 November 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: