Коли я повинен використовувати API перехідних процесів?


16

Я ніколи раніше не використовував API Transients і цікавився, чи є хтось вказівками, коли його використовувати. З статті Codex випливає, що я, як розробник тем, захотів би встановити кожну нову WP_Query()як перехідну; Я припускаю, що те саме можна сказати і для прямих $ wpdb запитів та query_posts(). Це надмірність? І / чи є інші місця, які я повинен використовувати за замовчуванням?

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


Дякую всім, я б хотів, щоб я міг відзначити більше, ніж одну відповідь як "рішення". Чудова інформація, високо оцінена!
Мішель

Відповіді:


16

Тимчасові перекази чудові, коли ти робиш складні запити у своїх темах та плагінах. Я, як правило, використовую перехідні процеси для таких речей, як меню та показу інших речей, наприклад твітів з Twitter, наприклад в бічній панелі. Я б не використовував їх для абсолютно всього іншого, тому просто тимчасових фрагментів даних, які можна кешувати.

Майте на увазі, що якщо ви використовуєте щось на кшталт Memcached з перехідними процесами, то ви помітите значне збільшення продуктивності. Правило з перехідними процесами полягає в тому, щоб не використовувати їх для даних, які не мають терміну дії, оскільки вони справді лише для тимчасових даних, але пам’ятайте, що перехідні процеси не завжди зберігаються в базі даних.

Деякі способи використання перехідних процесів :

  • Складні та власні запити до бази даних
  • Навігаційні меню Wordpress
  • Віджети бічної панелі, які відображають інформацію на зразок; твіти, список останніх відвідувачів сайту або фотопотік Flickr
  • Хмара тегів для кешування

Ця стаття є дуже інформативною із швидкими орієнтирами, що показують, як перехідні процеси можуть пришвидшити ваш сайт, і навіть є кілька прикладів. У цій іншій статті також є кілька чудових прикладів використання перехідних процесів, які можуть допомогти вам зрозуміти, для чого також їх використовувати.


2
Ще одне використання: кешування зовнішніх запитів HTTP. Як і потрапляння в API twitter. Не робіть це під час кожного завантаження сторінки, кешуйте результати тимчасово.
chrisguitarguy

11

У WordPress є кілька механізмів кешування, і їх механіка відрізняється, залежно від вибору об'єкта кешу (нативного чи ні):

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

Коротше кажучи, це означає, що перехідне середовище завжди є стійким (виживе між завантаженнями сторінок на відміну від кеша, що використовується в початковому режимі), але воно використовуватиме індивідуальне сховище, якщо воно надається (на відміну від параметрів).

Це робить перехідні найбільш універсальним вибором для кешування.

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

Загалом:

  • використовувати Опції для збереження речей, які повинні бути стійкими
  • використовувати перехідні процеси для кешування будь-чого іншого
  • використовуйте кеш, коли ви дуже добре розумієте всі три і знаєте, що кеш-пам'ять підходить для використання кращого випадку, ніж інші (що буде не часто)

4

Я думаю, що код від Sterling можна було вдосконалити, не викликаючи функції get_transient двічі. Замість цього зберігайте перший результат у тимчасовій змінній. Тому що ідея, що стоїть за тимчасовою API ist speed ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}

3

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

Довга відповідь:

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

Це не зайвий набір, і якщо це зробити правильно, виходить дуже елегантним:

// 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.

Щоб отримати більш чітке уявлення про те, що таке API Transients та чим відрізняється функція Cache WordPress, рекомендую переглянути розмови Отто та Наніка з WordCamp San Francisco 2011

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.