Всем привет!
Не так давно у нас с коллегой завязался спор, о том как лучше работать с ActiveRecord в Yii2, а в частности с методом
asArray();
.
Мой коллега предложил всегда или чаще всего использовать этот метод при получении данных из MySQL и строить запросы таким образом, что бы получать всегда плоский массив с нужными данными, похожий на этот
array(
'id'=>1,
'name'=>'SomeName',
'subscribers'=>1,
'likes'=>5,
);
ключи 'subscribers' и 'likes' это leftjoin в другую таблицу
аргументируя это тем, что:
- потребление памяти
- получаем простой массив
- скорость
Аргументы достаточно сильные, а мой контраргумент только удобство разработки с объектами.
На простом примере, когда задача сводиться к получить и отобразить, работа с
asArray();
очевидно выглядит намного предпочтительней, ведь действительно, зачем нам данные которые хранит модель ActiveRecord, информация о behavior и прочее.
Небольшой пример работы с данными в представлении для сравнения
// asArray();
foreach($model as $user){
<p><?= $user['name'] ?><p/>
<p><?= $user['subscribers'] ?><p/>
<p><?= $user['likes'] ?><p/>
}
// Object
foreach($model as $user){
<p><?= $user->name ?><p/>
<p><?= $user->subscribers->value ?><p/>
<p><?= $user->likes->value ?><p/>
}
Тест коллеги на локальном образе vagrant показал, что на 1 тыс записей asArray(); требует 4MB памяти, а объекты 12MB.
В задачи проекта не входит, получение больших массивов данных за один запрос, но большая нагрузка должна быть учтена.
У кого какие мысли на этот счет ? Насколько работа с объектами выигрышна по сравнению с массивами при задаче получить и отобразить ?