Каковы накладные расходы в PHP на мелких объектах?

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

И вот возник вопрос: при разборе объектов нужно выделять под свойства поля определенных типов, манипулировать ими, соответственно.


Удобнее, безусловно, на каждый тип поля создать класс и инстанциировать при необходимости. Но что-то меня смущает. Не многовато ли при этом накладных расходов получится? Таких мелких объектов насоздаваться сожет в одном скрипте много.


Пытался найти какую-то информацию на этот счет в сети — не нашел.
  • Вопрос задан
  • 2893 просмотра
Решения вопроса 1
EugeneOZ
@EugeneOZ
Вы заморачиваетесь на полноейшей чепухе. Если нужны объекты, значит нужно делать объекты, ничем Вы их не замените.
Делайте гибкую архитектуру в первую очередь. Кэширование одного запроса к базе данных может сэкономить в десятки тысяч раз больше времени, чем экономия на объектах ценой архитектуры.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@egorinsk
Во-первых, точный ответ дадут только тесты. Набросайте по-быстрому подобие того, что вы хотите сделать, и проверьте, сколько времени уйдет, например, на создание 100 000 объектов.

Во-вторых, по моим наблюдениям, проблема не столько в времени создания объектов, сколько в вызовах фукнций, они в PHP не очень быстрые. При создании объекта вызывается как минимум конструктор, и создание 20 свойств выльется в вызов 20 функций.

Я бы предпочел обойтись без этого. Мне кажется, вы усложняете себе жизнь.

Вообще, сложные объектные конструкции лучше реализовывать на языках выроде .NET/Java, а не на скриптовых — там все это будет работать гораздо быстрее.
Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер
В PHP нет больших или маленьких объектов по определению. В силу нетипизированности языка. А накладные расходы по памяти можно прикинуть посмотрев устройство zend структур.

На вскидку на хабре нашел перевод про массивы: "Насколько большие массивы (и значения) в PHP?", но точно были и другие статьи в которых очень неплохо описан принцип организации памяти под PHP типы.
Ответ написан
Комментировать
Удобнее, безусловно, на каждый тип поля создать класс и инстанциировать при необходимости.

Удобнее, имхо, просто приводить SQL-типы в PHP-типы и обратно непосредственно при чтении/записи, если вы только в своём приложении не используете ООП обёртки для всех скалярных типов в PHP, типа if ($user->login.equal(new String($_POT['login']))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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