Quand dois-je utiliser l'API Transients?
-
-
Merci àtous,j'aimeraispouvoirmarquerplus d'une réponse comme «solution».Excellenteinfo,très appréciée!Thanks everyone, I wish I could mark more than one answer as the 'solution'. Great info, much appreciated!
- 0
- 2012-03-12
- Michelle
-
5 réponses
- votes
-
- 2012-03-09
Lestransitoires sontparfaits lorsque vouseffectuez des requêtes complexes dans vosthèmeset plugins. J'aitendance à utiliser destransitoirespour des choses comme lesmenuset pour afficher d'autres choses comme les Tweets de Twitter dans unebarre latéraleparexemple. Jene les utiliseraispaspour absolumenttout,doncjuste des donnéestemporaires quipeuvent êtremisesen cache.
Gardez à l'esprit que si vous utilisez quelque chose comme Memcached avec destransitoires,vous remarquerez ungain deperformances énorme. La règle avec lestransitoiresest dene pas les utiliserpour des données quine devraientpasexpirer carilsne sonten réalité quepour des donnéestemporaireset gardez à l'esprit que lestransitoiresne sontpastoujours stockés dans labase de données.
Quelques utilisationspour lestransitoires :
- Requêtes debase de données complexeset personnalisées
- Menus denavigation Wordpress
- Widgets de labarre latérale qui affichent desinformationstelles que;tweets,liste des visiteurs récents du site ouflux dephotos Flickr
- Miseen cache desnuages detags
Cet article esttrèsinstructif avec des repères rapidesmontrant à quelpoint lestransitoirespeuvent accélérer votre siteet amême quelquesexemples. Cet autre article contient également quelquesexcellentsexemples d'utilisation detransitoires quipourraient vous aider à comprendre ce quepour les utiliser également.
Transients are great when you're doing complex queries in your themes and plugins. I tend to use transients for things like menus and showing other things like Tweets from Twitter in a sidebar for example. I wouldn't use them for absolutely everything more-so just temporary pieces of data that can be cached.
Keep in mind that if you use something like Memcached with transients, then you will notice a massive performance gain. The rule with transients is to not use them for data that should not expire as they're really only for temporary data and keep in mind transients are not always stored in the database.
Some uses for transients:
- Complex and custom database queries
- Wordpress navigation menus
- Sidebar widgets that display info like; tweets, a list of recent site visitors or a Flickr photo stream
- Caching tag clouds
This article is a very informative one with quick benchmarks showing just how transients can speed up your site and even has a couple of examples. This other article also has a few great examples of using transients which might help you understand what to use them for as well.
-
Autre utilisation: lamiseen cache des requêtes HTTPexternes.Commefrapper l'API Twitter.Ne lefaitespas à chaque chargement depage,mettezen cache les résultats avec untransitoire.Another use: caching external HTTP requests. Like hitting the twitter API. Don't do it on every page load, cache the results with a transient.
- 2
- 2012-03-10
- chrisguitarguy
-
- 2012-03-10
Ilexisteplusieursmécanismes demiseen cache dans WordPresset leursmécanismes diffèrent,en fonction du choix du cache d'objets (natif ounon) :
+-----------+-------------------------+---------------------+ | | Native | Object cache plugin | +-----------+-------------------------+---------------------+ | Option | Persistent (database) | N/A | | Transient | Persistent (database) | Persistent (varies) | | Cache | Non-persistent (memory) | Persistent (varies) | +-----------+-------------------------+---------------------+
Enbref,cela signifie que letransitoireesttoujourspersistant (survivraentre les chargements depage contrairement à Cachenativement),maisil utilisera un stockagepersonnalisé s'ilestfourni (contrairement aux Options).
Celafait destransitoires le choix lepluspolyvalentpour lamiseen cache.
Cependant,laflexibilitéest sous-jacente à la complexité actuelleet il y apasmal denuances avecelles (comme la limite de longueur dunom,un comportement différent avecet sansexpiration,lemanque de ramasse-miettes) qui les rendentplus complexes qu'iln'yparaît.
Dans l'ensemble:
- utiliser les optionspourenregistrer les éléments qui doivent êtrepersistants
- utiliser lestransitoirespourmettreen cache autre chose
- utilisez Cache lorsque vous avez unetrèsbonne compréhension destroiset que vous savez que Cache correspondmieux aux cas d'utilisation que d'autres (ce quine serapas souvent)
There are several caching mechanisms in WordPress and their mechanics differ, depending on choice of object cache (native or not):
+-----------+-------------------------+---------------------+ | | Native | Object cache plugin | +-----------+-------------------------+---------------------+ | Option | Persistent (database) | N/A | | Transient | Persistent (database) | Persistent (varies) | | Cache | Non-persistent (memory) | Persistent (varies) | +-----------+-------------------------+---------------------+
In a nutshell what this means is that transient is always persistent (will survive between page loads unlike Cache natively), but it will make use of customized storage if provided (unlike Options).
This makes transients most versatile choice for caching.
However with flexibility comes undercurrent complexity and there are quite a few of nuances with them (such as limit on name length, different behavior with and without expiration, lack of garbage collection) that make them more complex than they seem.
Overall:
- use Options for saving things that must be persistent
- use Transients for caching anything else
- use Cache when you have very good grasp of all three and know that Cache fits use case better than others (which won't be often)
-
- 2012-03-10
Jepense que le code de Sterlingpourrait être amélioréen n'appelantpas lafonctionget_transient deuxfois.Stockezplutôt lepremier résultat dans une variabletemporaire.Parce que l'idée derrière l'API Transientest la vitesse ;-)
private function _get_data( $query) { $result = get_transient( $query ); if ( $result ) { return $result; } else { return $this->_get_query( $query ); } }
I think the code from Sterling could be improved by not call the get_transient function twice. Instead store the first result in a temporary variable. Because the idea behind the Transient API ist speed ;-)
private function _get_data( $query) { $result = get_transient( $query ); if ( $result ) { return $result; } else { return $this->_get_query( $query ); } }
-
- 2012-03-09
Réponse courte: Vous devriez l'utiliser quand/où vous lepouvez.
Réponse longue:
L'API Transients sert à lamiseen cache.Vous voulez donc l'utiliser autant que vous lepouvez. Vouspouvez écrire unefonction quifait celapour vous.
Cen'estpasexagéréet si celaestfait correctement,celafinit par être assez élégant:
// 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. }
Short Answer: You should use it when/where you can.
Long Answer:
The Transients API is for caching. So you want to use it as much as you can. You can write a function that does this for you.
It's not overkill and if done properly ends up being pretty elegant:
// 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. }
-
- 2012-03-10
L'API Transientsest vraiment utile lorsque vous récupérez des données àpartir de sourcesexternestelles que Facebook,Twitter.
Pour avoir uneidéeplus claire de ce qu'est l'API Transientset de la différence avec lafonction Cache WordPress,je recommande de regarder le discours d'Ottoet Nanic sur WordCamp San Francisco 2011
Transients API is really useful when you're fetching data from external sources like Facebook, Twitter.
To get more clear idea of what Transients API is and what is difference with Cache WordPress function, I recommend to watch Otto's and Nanic's talk from WordCamp San Francisco 2011
Jen'aijamais utilisé l'API Transients auparavantet jeme demandais si quelqu'unpouvait savoir quand l'utiliser.L ' article du Codex implique qu'entant que développeur dethèmes,je pourrais souhaiter définir chaquenouveau
WP_Query()
commetransitoire;Je suppose que lamême chosepourrait être ditepour les requêtes directes $ wpdbetquery_posts()
.Est-ceexagéré?Et/Ou y a-t-il d'autresendroits oùje devrais l'utiliserpar défaut?J'utilise souvent desplugins demiseen cache surmon site (W3 Total Cachegénéralement)et il semble que l'utilisation de Transientspourrait augmenter l'efficacité duplugin,maisje ne veuxpas devenirfouen emballanttout dans destransitoires si cen'estpas unebonnepratique.