Comments 27
Еще очень замедляет и утяжеляет приложение использование relations, поэтому выборки, где есть связанные модели, нужно делать с помощью DAO. Далее для сохранения логики можно применить паттерн flyweight к выбранным данным. В данном случае, конечно, полагаться на механизм релейшнов для отображения не стоит.
И на против, от количества полей в SELECT будет напрямую зависеть скорость работы DAO.ну ушь не напрямую прям, все таки не на GPRS канале связь с бд идет… я надеюсь.
Учитывая реалии сегодняшнего дня, в вашем тесте есть пара фундаментальных недоработок:
- PHP 5.4 — нужно использовать его, т.к. в нём весьма прилично оптимизировали объекты. Как по CPU, так и по памяти. Разница достаточно сильная.
- ActiveRecord читает метаданные таблиц по умолчанию из базы на каждый экземпляр объекта. schemaCachingDuration вам в помощь, поскольку без него и так понятно, что всё будет мрачно.
- Потеря удобства разработки, причём это может сказаться на времени исполнения крайне негативно.
- Ну и в реальности никто не будет перебирать такие объёмы через AR если есть требования к скорости выполнения, а так же скушает слишком много памяти.
Вы не поняли сути поста. Так сказать, фундаментально сморозили чушь.
1. В любом случае не будет работать быстрее массивов, а то что быстрее так это хорошо
2. А представляете, если использовать Кэширование страниц, вообще не придется обращаться к AR
3. Вообще пункт в пустоту
4. Это и так понятно, зачем нужно было сюда это писать, не понимаю…
Цель поста, показать на примере и цифрах Почему и Где и При каких Конкретно условиях и в Каких границах можно или нельзя использовать 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 обращаться за мета данными в базу или нет.
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 ассоциируется с конкретной библиотекой, а не с паттерном.
Почему «стал»? Сравните количество результатов в поиске по «activerecord ruby» и «activerecord php».
А хабов в гугль ридере не видно.
А хабов в гугль ридере не видно.
Active Record есть только в Ruby? :)
Конечно же классы можно наследовать от CActiveRecord, даже если не собираешься использовать классический подход Active Record
Зачем?
Чтоб использовать другие удобные функции CActiveRecord, которые уже написаны и протестированные. К примеру этот класс нормально так подходит для базового класса моделей (хотя у меня еще дополнительная прослойка-класс существует).
Причем, бывают случаи, когда все же лучше использовать подход AR — хоть в той же админке, где не нужна скорость а нужен комфорт и надежность. Не создавать же теперь две разные модели.
Причем, бывают случаи, когда все же лучше использовать подход AR — хоть в той же админке, где не нужна скорость а нужен комфорт и надежность. Не создавать же теперь две разные модели.
Хороший лаконичный пост.
Рад видеть на хабре, кстати. сначала открыл посмотрев только на называние, думал скинуть тебе, а потом оказалось что ты автор ;)
Рад видеть на хабре, кстати. сначала открыл посмотрев только на называние, думал скинуть тебе, а потом оказалось что ты автор ;)
Sign up to leave a comment.
Оптимизация использования моделей от Active Record, и немного массивов