Кеширование большое сравнение

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Кеширование большое сравнение

Сообщение an.viktory@gmail.com »

Запускаю вот такой тест в codeception (postgresql)

Код: Выделить всё

    foreach ([10, 100, 500, 1000] as $countIterations) {

            /** @var Flight $flight */
            $start = microtime(true);

            foreach (range(1, $countIterations) as $item) {
                $flight = Flight::findOne(1001);
                $airport = Airport::find()->where(['id' => $flight->dep_airport_id])->one();
                unset($airport);
                unset($flight);
            }

            codecept_debug("WITHOUT CACHING " . $withoutCaching = (microtime(true) - $start));

            $middle = microtime(true) ;

            foreach (range(1, $countIterations) as $item) {
                $flight = Flight::findOne(1001);
                $airport = Airport::find()->where(['id' => $flight->dep_airport_id])->cache(60)->one();
                unset($airport);
                unset($flight);
            }

            codecept_debug("USING CACHING " . $usingCaching = (microtime(true) - $middle));

            $middle = microtime(true) ;

            foreach (range(1, $countIterations) as $item) {
                $flight = Flight::find()->where(['id' => 1001])->with('depAirport')->one();
                $airport = $flight->depAirport;
                unset($airport);
                unset($flight);
            }

            codecept_debug("USING JOIN " . $usingjoin = (microtime(true) - $middle));

            $report[$countIterations]['withoutCaching'] = $withoutCaching;
            $report[$countIterations]['withCaching'] = $usingCaching;
            $report[$countIterations]['usingJoin'] = $usingjoin;
        }

        codecept_debug($report);
и получаю вот такой интересный результат

Код: Выделить всё

filecache
{
  "10": {
    "withoutCaching": 0.0264890193939209,
    "withCaching": 0.021969079971313477,
    "usingJoin": 0.03578686714172363
  },
  "100": {
    "withoutCaching": 0.3238999843597412,
    "withCaching": 0.2315349578857422,
    "usingJoin": 0.34312009811401367
  },
  "500": {
    "withoutCaching": 1.6668269634246826,
    "withCaching": 1.1529579162597656,
    "usingJoin": 1.9034368991851807
  },
  "1000": {
    "withoutCaching": 3.0730018615722656,
    "withCaching": 2.053650140762329,
    "usingJoin": 3.541599988937378
  }
}
memcached

{
  "10": {
    "withoutCaching": 0.02604508399963379,
    "withCaching": 0.023540973663330078,
    "usingJoin": 0.03496503829956055
  },
  "100": {
    "withoutCaching": 0.3361978530883789,
    "withCaching": 0.23589396476745605,
    "usingJoin": 0.3005180358886719
  },
  "500": {
    "withoutCaching": 1.499621868133545,
    "withCaching": 1.2472150325775146,
    "usingJoin": 1.6169250011444092
  },
  "1000": {
    "withoutCaching": 3.1708409786224365,
    "withCaching": 2.4509940147399902,
    "usingJoin": 3.14654803276062
  }
}


т.е. использование кеша дает мне прироста производительности всего в 1,5 раза почему, и filecache сравним с memcached ?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Кеширование большое сравнение

Сообщение ElisDN »

У вас в with caching строка $flight = Flight::findOne(1001) не кешируется. Перепишите её тоже на ->cache(60)->one().

With не использует JOIN, а также подгружает аэропорт вторым отдельным запросом как у вас в without caching.
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: Кеширование большое сравнение

Сообщение an.viktory@gmail.com »

ElisDN писал(а): 2019.07.25, 17:29 У вас в with caching строка $flight = Flight::findOne(1001) не кешируется. Перепишите её тоже на ->cache(60)->one().

With не использует JOIN, а также подгружает аэропорт вторым отдельным запросом как у вас в without caching.
По большому счету меня интересовало именно различные варианты святия именно связи depAirport при прочих равных. Но, действительно, для более объектичного замера нужно из времени выполнения исключать эту строку или кешировать для меньшего влияния на общее время.
Спасибо!
Ответить