Когда я должен использовать API Transient?

16

Я никогда не использовал API-интерфейс Transient и задавался вопросом, есть ли у кого-нибудь рекомендации о том, когда его использовать. Статья Кодекса предполагает , что в качестве разработчика темы я мог бы задать каждый новый WP_Query()как переходные; Я предполагаю, что то же самое можно сказать и о прямых запросах $ wpdb и query_posts(). Это излишне? И / или есть ли другие места, которые я должен использовать по умолчанию?

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

Мишель
источник
Спасибо всем, хотелось бы отметить более одного ответа как «решение». Отличная информация, высоко ценится!
Мишель

Ответы:

16

Переходные процессы хороши, когда вы делаете сложные запросы в своих темах и плагинах. Я склонен использовать переходные процессы для таких вещей, как меню и показывать другие вещи, такие как твиты из Twitter, например, на боковой панели. Я бы не стал использовать их для абсолютно всего, поэтому для временных фрагментов данных, которые можно кэшировать.

Имейте в виду, что если вы используете что-то вроде Memcached с переходными процессами, то вы заметите значительное увеличение производительности. Правило для переходных процессов заключается в том, чтобы не использовать их для данных, срок действия которых не должен истекать, поскольку они действительно предназначены только для временных данных, и имейте в виду, что переходные процессы не всегда хранятся в базе данных.

Некоторые использования для переходных процессов :

  • Сложные и нестандартные запросы к базе данных
  • Wordpress навигационные меню
  • Виджеты боковой панели, которые отображают информацию как; твиты, список недавних посетителей сайта или поток фотографий Flickr
  • Кэширование тегов облаков

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

Дуэйн Чаррингтон
источник
2
Другое использование: кэширование внешних HTTP-запросов. Как и в Twitter API. Не делайте этого при каждой загрузке страницы, кешируйте результаты с помощью переходных процессов.
chrisguitarguy
11

В WordPress есть несколько механизмов кеширования, и их механизмы отличаются в зависимости от выбора кеша объектов (нативного или нет):

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+

В двух словах, это означает, что переходные процессы всегда постоянны (будут существовать между загрузками страниц, в отличие от Cache), но будут использовать настраиваемое хранилище, если оно предусмотрено (в отличие от Options).

Это делает переходные процессы наиболее универсальным выбором для кэширования.

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

В целом:

  • используйте параметры для сохранения вещей, которые должны быть постоянными
  • использовать переходные процессы для кэширования всего остального
  • используйте Cache, когда вы хорошо разбираетесь во всех трех и знаете, что Cache лучше подходит для использования, чем другие (что будет не часто)
Rarst
источник
4

Я думаю, что код из Sterling можно улучшить, не вызывая функцию get_transient дважды. Вместо этого сохраните первый результат во временной переменной. Потому что идея Transient API заключается в скорости ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}
Томас
источник
3

Краткий ответ: Вы должны использовать его, когда / где вы можете.

Длинный ответ:

Переходные API для кеширования. Таким образом, вы хотите использовать его как можно больше. Вы можете написать функцию, которая сделает это за вас.

Это не излишне, и если все сделано правильно, получается довольно элегантно:

// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
    return
    ( get_transient( $query ) ) ?
    get_transient( $query ) :
    $this->_get_query( $query );
}

// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
  // Database logic. Results go to $results.
  ...
  set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}
Стерлинг гамильтон
источник
3

Транзитный API действительно полезен, когда вы выбираете данные из внешних источников, таких как Facebook, Twitter.

Чтобы получить более четкое представление о том, что такое Transients API и в чем отличие от функции кэширования WordPress, я рекомендую посмотреть доклад Отто и Наника из WordCamp San Francisco 2011

Mamaduka
источник