Как организовать и кэшировать дополнительные данные, связанные с терминами?


Я обновляю свой плагин, и мне трудно найти "лучший способ" для создания определенной функциональности. Плагин позволяет пользователям связывать изображения из своей медиатеки с любым термином любой таксономии. В настоящее время я работаю над созданием функций, которые пользователи могут добавлять в свои темы и плагины, чтобы получить данные, хранящиеся в плагине. Код, который у меня есть до сих пор, можно посмотреть здесь: https://github.com/mfields/Taxonomy-Images/blob/master/public-filters.php

Функциональность, представленная в этом файле, позволяет пользователям получать изображение запрашиваемого в данный момент термина (для представлений архива таксономии), а другая функция в основном является оболочкой для основной функции get_terms(), которая возвращает все термины данной таксономии при добавлении идентификатора изображения к каждому объекту термина. Я хотел бы добавить третью функцию в файл перед выпуском. Это будет оболочка для get_the_terms() и вернет все термины, связанные с глобальным объектом post, которые содержат изображения.

Я думал о моделировании функции get_the_terms() после функции get_terms(), которая встроила кэширование для файлов изображений. Но я немного боюсь того, что произойдет, если эта функция будет использоваться в цикле в любом шаблоне архива.

В основном рабочий процесс будет выглядеть примерно так:

  1. Получить все ассоциации изображений/терминов (0 запросов).
  2. Получить термины, связанные с глобальная почта: get_the_terms() (0 запросов).
  3. Запрос для всех изображений, связанных с терминами (3 запроса). Это делается путем создания списка всех идентификаторов изображений и передачи их в get_posts() с помощью параметра include.

ИМХО, это хорошо делать в отдельных представлениях(single.php, page.php , и т.д.), Но что произойдет, если пользователь будет использовать эту функцию в цикле в архивных представлениях? Вам нужно будет умножить 3 запроса (созданных с помощью get_posts()) на значение параметра сообщений на страницу (10 по умолчанию Установка WordPress). Итак, теперь у нас всего 30 запросов. Это становится довольно уродливым быстро! Особенно, если пользователи хотят, чтобы отображались изображения из нескольких таксономий. 2 таксономии на пост добавят 60 к тому, что нужно сделать WordPress!

В принципе, есть несколько путей продвижения вперед, и я хотел бы знать, что бы вы сделали в подобной ситуации.

  1. Не создавайте функциональность вообще.

  2. Создайте функцию и обучите пользователей тому, что кэширование плагин должен быть установлен, если они используют get_the_terms() в представлениях архива.

  3. Создайте функцию + создайте другую функцию, которая будет кэшировать все изображения перед загрузкой шаблона архива. Этот процесс будет включать что-то вроде: После создания массива $posts (но до загрузки шаблона) выполните цикл по всем записям в массиве, вызывая get_the_terms() каждую итерацию для каждой общедоступной таксономии. Выходные данные всех объектов term будут сохранены в новом массиве. Затем я мог бы определить, какие изображения связаны с каждым термином каждой таксономии, и передать идентификаторы изображений в get_posts() за один снимок. Это позволит кэшировать всю информацию об изображении для использования в шаблоне в 3 запросах вместо 30, 60 или 90.

IMHO 3 кажется логичным решением, но я не совсем уверен, будет ли это антиоптимизация или нет.

Пожалуйста, дайте мне знать ваши мысли по этому поводу!

Author: mfields, 2011-05-21

1 answers

Я бы сказал, что ваш третий вариант - это правильный путь.

Кстати, почему вы включили свой собственный статический кэш в taxonomy_image_plugin_get_associations() вместо того, чтобы использовать встроенный API wp_cache для этого? Есть ли причина, по которой wp_cache_get не будет работать здесь? Похоже, что использование кэша объектов WP будет лучше оптимизироваться, когда у людей включены плагины кэширования.

 1
Author: goldenapples, 2011-05-21 16:42:47