Странное кэширование объектов в Advanced Custom Fields 4

Залез в исходники популярного плагина ACF (Advanced Custom Fields), который все используют. Там какая-то чудная логика кэширования объектов, как я понял (я смотрел версию 4.3.9, думаю стоит ли покупать 5).

Вся логика получения данных из БД находится в файле core/api.php.

Например, если я вызываю get_field (), то ACF посредством get_post_meta () получает лишь 1 метазначение для поста (страницы) и кэширует его. Получается двойное кэширование под разными ключами — один раз кэширует сам WordPress внутри get_post_meta, а второй раз сам ACF. В принципе это нормально, потому что ACF форматирует некоторые данные и они уже могут быть не совсем такими, как из БД (как я это понимаю).

Допустим у меня 100 метаполей. Вызывая 100 раз get_field () будет сделано 100 разных запросов в БД. Есть функция get_fields (), она получает все метаполя для поста (страницы), правда уже не через get_post_meta (), а своим голым запросов в БД и далее кэширует каждую ячейку полученного массива под отдельным ключем, как и в первом случае. Но перед отправкой запроса в БД на получение полного объекта (массива) данных функция не проверяет, делался ли уже запрос на эти данные (может есть кэш).

Получается надо первый раз на любой странице использовать get_fields (), а все последующие получения данных делать через get_field (). Как-то мне кажется криво.

Дайте знать, если кто-то знает больше или я в чем-то ошибаюсь.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s