Pull to refresh

Comments 27

Еще очень замедляет и утяжеляет приложение использование relations, поэтому выборки, где есть связанные модели, нужно делать с помощью DAO. Далее для сохранения логики можно применить паттерн flyweight к выбранным данным. В данном случае, конечно, полагаться на механизм релейшнов для отображения не стоит.
>Еще очень замедляет и утяжеляет приложение использование relations, поэтому выборки, где есть >связанные модели, нужно делать с помощью DAO

На самом деле — жадная загрузка по реляциям не медленнее чем при использовании DAO. А удобство разработки дорогого стоит.
И на против, от количества полей в SELECT будет напрямую зависеть скорость работы DAO.
ну ушь не напрямую прям, все таки не на GPRS канале связь с бд идет… я надеюсь.
Учитывая реалии сегодняшнего дня, в вашем тесте есть пара фундаментальных недоработок:
  • PHP 5.4 — нужно использовать его, т.к. в нём весьма прилично оптимизировали объекты. Как по CPU, так и по памяти. Разница достаточно сильная.
  • ActiveRecord читает метаданные таблиц по умолчанию из базы на каждый экземпляр объекта. schemaCachingDuration вам в помощь, поскольку без него и так понятно, что всё будет мрачно.
  • Потеря удобства разработки, причём это может сказаться на времени исполнения крайне негативно.
  • Ну и в реальности никто не будет перебирать такие объёмы через AR если есть требования к скорости выполнения, а так же скушает слишком много памяти.
Вы не поняли сути поста. Так сказать, фундаментально сморозили чушь.

1. В любом случае не будет работать быстрее массивов, а то что быстрее так это хорошо
2. А представляете, если использовать Кэширование страниц, вообще не придется обращаться к AR
3. Вообще пункт в пустоту
4. Это и так понятно, зачем нужно было сюда это писать, не понимаю…

Цель поста, показать на примере и цифрах Почему и Где и При каких Конкретно условиях и в Каких границах можно или нельзя использовать AR или массивы. Наглядно показать.
Отвечаю на претензию по поводу schemaCachingDuration уважаемому Psih

system.db.CDbCommand.query(SHOW COLUMNS FROM `address`) 1 0.00501 0.00501 0.00501 0.00501
system.db.CDbCommand.query(SHOW CREATE TABLE `address`) 1 0.00318 0.00318 0.00318 0.00318

Кеширование мета данных ни как не связно с вводом данных в объект. Кеш schemaCachingDuration отвечает только за то, будет ли php обращаться за мета данными в базу или нет.
В данном примере при создании модели она будет обращаться в базу за своей структурой. Кеш её считывание и разборку уберёт, позволив быстро создать нужные внутренние объекты.
В данном примере я же доступно показал, что мета данные кешируются. Не тупите.
Считывание уберёт, разобрку уберёт далеко не всю.
Было бы неплохо, если бы в заголовке указывалось, что речь идёт о PHP. А то по названию ожидаешь руби.
ActiveRecord уже с руби стал ассоциироваться? Я по хабам понял про что речь.
Просто в узком кругу ограниченных людей, слово ActiveRecord ассоциируется с конкретной библиотекой, а не с паттерном.
Ну уж простите нас, ограниченных. Куда нам до многомудрых полугениев.
В посте, похоже, тоже ассоциируется с конкретной библиотекой.
Ну как бы да, но есть же хабы, говорящие для какого фреймворка и для какого языка этот пост. Как по мне проблема с заголовком слегка преувеличенна. Хотя да, указание что это ORM в Yii было бы не лишним.
К сожалению в RSS не отображаются хабы.
Почему «стал»? Сравните количество результатов в поиске по «activerecord ruby» и «activerecord php».
А хабов в гугль ридере не видно.
Сравните количество результатов в поиске по «activerecord ruby» и «activerecord php».


Аргумент!
Active Record есть только в Ruby? :)
Конечно же классы можно наследовать от CActiveRecord, даже если не собираешься использовать классический подход Active Record


Зачем?
Извиняюсь, нажалось не туда :)
Конечно же классы можно наследовать от CActiveRecord, даже если не собираешься использовать классический подход Active Record


Зачем?
Чтоб использовать другие удобные функции CActiveRecord, которые уже написаны и протестированные. К примеру этот класс нормально так подходит для базового класса моделей (хотя у меня еще дополнительная прослойка-класс существует).
Причем, бывают случаи, когда все же лучше использовать подход AR — хоть в той же админке, где не нужна скорость а нужен комфорт и надежность. Не создавать же теперь две разные модели.
Ну, если иногда пользоваться, иногда нет, тогда всё верно.
Хороший лаконичный пост.
Рад видеть на хабре, кстати. сначала открыл посмотрев только на называние, думал скинуть тебе, а потом оказалось что ты автор ;)
Sign up to leave a comment.

Articles