<rmcreative>

RSS
  1. Когда уместен Active Record в Yii 2

    22 июля 2016

    В комментариях к посту про модули Дмитрий задал вопросы про AR.

    Объем записей в таблицах от 500к, почти каждый запрос это 2-3 JOINa. Раньше делал через геттеры AR, выборка за раз порядка 100 записей. Но заметил такую штуку, что если использовать createCommand, то память заметно меньше расходуется и скорость быстрее. К сожалению, сейчас не могу показать реальные тесты, так как тестировали это месяц назад, но в итоге, большую часть моделей мы переписали на DAO, отказавшись от AR.

    Память уходит на хранение данных в объектах. Скорость теряется из за необходимости эти объекты инстанциировать.

    Так, так ли плох AR или его использование подходит для небольших проектов? У нас также постоянно идет вставка, порядка 5000 записей в час. Пока для этого используем AR.

    Когда использование AR уместно, а когда нет?

    AR отлично подходит для удаления, обновления или добавления небольшого количества записей по одной за раз. Чрезвычайно удобно. К тому же, поддержка dirty attributes, то есть сохранения только того, что изменилось, позволяет хорошо разгрузить базу данных и скрыть до лучших времён многие моменты при параллельном редактировании. Если у вас в приложении нет сильно сложной логики и не требуется дополнительных абстракций для сущности, то AR для этого подходит идеально.

    Для простых выборок с целью отображения до сотни записей на страницу, в принципе, AR тоже подходит. Да, с массивами через query builder или с asArray() получается быстрее и меньше кушает памяти, но работать с ними не столь удобно.

    Для сложных выборок AR не рекомендуется. Сложные выборки у нас обычно возвращают какие-либо агрегаты или преобразованные данные, которые ну никак не вписываются в изначальную модель AR. В этом случае лучше делать выборки через query builder.

    Для импорта-экспорта также лучше использовать query builder.

    17 комментариев
  2. Видео моего доклада по безопасности с Deep Refactoring

    18 июля 2016

    В Воронеже несколько раз в месяц мы собираемся небольшой компанией, которую окрестили клубом «Deep Refactoring», рассказываем интересное из мира IT в виде доклада и горячо обсуждаем после. В начале месяца я рассказывал «Безопасность: от базовых принципов до особенностей PHP». Доклад я первый раз прочитал на английском в Стамбуле, затем на DevConf и последний раз в клубе.

    Слайды всё те же с DevConf, а вот рассказ отличается. Во-первых, рассказывал в небольшой компании, так что задавали вопросы по ходу и меняли ход рассказа. Во-вторых, дело было в пабе :)

    Слушайте на YouTube. Посмотреть особо не удастся. Темно.

    Кстати, докладов было прочитано за время существования клуба уже не мало, все их можно посмотреть там же на YouTube.

    Комментировать
  3. Yii 2.0.9

    11 июля 2016

    Релизнули Yii 2.0.9. Анонс можно прочитать на хабре.

    Выпустили немного раньше запланированного. Ничего сверхважного при этом на следующий релиз не перекинули, что, по-моему, прекрасно.

    4 комментария
  4. Встреча Intellectsoft по Yii 2, Codeception и тестированию в Киеве

    5 июля 2016

    13 июля Intellectsoft с 18:00 по 22:00 организуют встречу по Yii 2, Codeception и тестированию. Пройдёт она по адресу Киев, Лейпигская 15, БЦ MERX-2. Встречу ведёт Михаил Бондарчук, автор Codeception.

    Читаем

    9 комментариев
  5. Как получить mock из ActiveRecord

    5 июля 2016

    На тостере в комментариях к вопросу спросили, как получить mock ActiveRecord, чтобы он не пытался лезть в базу и возможно ли.

    Возможно. В случае PHPUnit делается так:

    $post = $this->getMockBuilder('\app\model\Post')
        ->setMethods(['save', 'attributes'])
        ->getMock();
    $post->method('save')->willReturn(true);
    $post->method('attributes')->willReturn([
        'id',
        'status',
        'title',
        'description',
        'text'
    ]);

    Особенность заключается в том, что перекрыть надо ещё и метод attributes() потому как ActiveRecord лезет за схемой в базу данных, что нам не нужно.

    5 комментариев
  6. Вышел официальный HTTP клиент для Yii 2

    1 июля 2016

    Выпустили официальное расширение-клиент HTTP. Написано почти целиком Павлом Климовым. До последнего времени не было тегнуто как релиз из за несовместимости с PSR-7, хотя уже много где использовалось. После долгих обсуждений всё-таки решили выпускать без PSR-7. К нему, возможно, вернёмся в 2.1.x.

    Выполнение HTTP запроса выглядит вот так:

    use yii\httpclient\Client;
     
    $client = new Client();
    $response = $client->createRequest()
        ->setMethod('post')
        ->setUrl('http://example.com/api/1.0/users')
        ->setData(['name' => 'John Doe', 'email' => 'johndoe@domain.com'])
        ->send();
    if ($response->isOk) {
        $newUserId = $response->data['id'];
    }

    https://github.com/yiisoft/yii2-httpclient

    11 комментариев
  7. Выпущена версия 2.1.0 расширения для MongoDB

    27 июня 2016

    Выпущена версия 2.1.0 расширения для MongoDB, которая использует новый драйвер MongoDB . Расширение отлично работает с PHP 7.x и HHVM.

    Данная версия не совместима с 2.0.x, поэтому стоит сначала прочитать UPGRADE и обновить свой код.

    Если вы хотите остаться на 2.0.x, удостоверьтесь, что в вашем composer.json версия указана как ~2.0.5. Подробнее о версиях можно узнать из документации Composer.

    Кроме нового драйвера в данной версии есть и некоторые улучшения, такие как пакетное чтение и пакетная запись данных. Подробнее о них можно узнать из CHANGELOG.

    8 комментариев
  8. DevConf 2016, отчёт

    25 июня 2016

    17 июня прошла конференция DevConf. В этот раз всё происходило в бизнес-школе Сколково. Здание очень интересное и довольно приятное.

    Хоть и немного запутанное...

    Мой доклад «Безопасность: от базовых принципов до особенностей PHP» прошёл замечательно. Было много интересных вопросов и отличные обсуждения после. Кроме него удалось послушать Дмитрия Стогова про PHP 7.1 и Андрея Нестера про SOLID.

    DevConf отличителен особой общительностью участников и располагающей к этому атмосферой, поэтому остальное время было проведено за приятным и полезным общением. Повидался со старыми знакомыми, пообщался вживую с сообществом Yii.

    Порадовали отличные задачки, раздаваемые в холле. Особенно задача написать функцию, которая по координатам трёх точек считает сумму углов треугольника, ими образованного.

    После конференции съездили в гости в офис Badoo, где был вероломно разграблен корпоративный холодильник со вкусняшками. Badoo... спасибо! У вас хорошо.

    Спасибо организаторам конференции и её участникам. Всё прошло прекрасно!

    А после были два дня хакатона по Yii. О них я тоже писал.

    7 комментариев
  9. Хакатон по Yii Framework в TACC, отчёт

    25 июня 2016

    Оформил отчёт о хакатоне по Yii, который прошёл в ТАСС 18 и 19 июня. Всё прошло как нельзя лучше несмотря на то, что особых приготовлений с моей стороны не было — был в отпуске. ТАСС — молодцы. Если подготовить заранее чёткий план работ — будет ещё лучше.

    Читаем на хабре

    Комментировать
  10. Модули Yii

    15 июня 2016

    Модули Yii существуют для решения двух задач:

    1. Группировка похожих функций приложения.
    2. Изоляция функций для их последующего использования в других проектах.

    Когда команда Yii думала над модулями, задача рассматривалась целиком: то есть и группировка и изоляция. Но как только сообщество начало использовать модули, оказалось, что используются они, в основном, для группировки.

    Оно и понятно: нормальную изоляцию сделать тяжело. Модуль не должен в этом случае использовать что-либо извне напрямую. Если что-либо необходимо, модуль предоставляет интерфейс, который реализуется в приложении, использующем модуль. То же применимо и к обратной ситуации: извне использовать что-либо из модуля напрямую строго запрещено: только через интерфейс.

    15 комментариев