Je parle bien sûr des transients, cette fameuse API qui ne vous veut que du bien. Voyons des cas concrets d’utilisation pour réduire les requêtes distances et ainsi gagner en performances de temps de chargement. L’auditoire apprendra à utiliser l’API “transient” de WordPress dans le but dé gagner en performances.
6. /ˈtræn.zɪənt/
L'API des Transients offre un moyen simple
et standardisé de stocker des données mises
en cache dans la base de données de façon
temporaire en lui donnant un nom et un
délai après lequel il expirera et sera
supprimé.
Source : Codex
7. L'API des Transients offre un moyen simple
et standardisé de stocker des données mises
en cache dans la base de données de façon
temporaire en lui donnant un nom et un
délai après lequel il expirera et sera
supprimé.
Source : Codex
/ˈtræn.zɪənt/
- Pas que en BDD.
8. L'API des Transients offre un moyen simple
et standardisé de stocker des données mises
en cache dans la base de données de façon
temporaire en lui donnant un nom et un
délai après lequel il expirera et sera
supprimé.
Source : Codex
/ˈtræn.zɪənt/
- Pas que en BDD,
- Délai non obligatoire.
9. L'API des Transients offre un moyen simple
et standardisé de stocker des données mises
en cache dans la base de données de façon
temporaire en lui donnant un nom et un
délai après lequel il expirera et sera
supprimé.
Source : Codex
/ˈtræn.zɪənt/
- Pas que en BDD,
- Délai non obligatoire,
- Peut être supprimé avant expiration.
10. L'API des Transients offre un moyen simple
et standardisé de stocker des données mises
en cache dans la base de données de façon
temporaire en lui donnant un nom et un
délai après lequel il expirera et sera
supprimé.
Source : Codex
/ˈtræn.zɪənt/
- Pas que en BDD,
- Délai non obligatoire,
- Peut être supprimé avant expiration,
- Reste en base après expiration.
11. L'API des Transients offre un moyen simple
et standardisé de stocker des données mises
en cache dans la base de données de façon
temporaire en lui donnant un nom et un
délai après lequel il expirera et sera
supprimé.
Source : Codex
/ˈtræn.zɪənt/
- Pas que en BDD,
- Délai non obligatoire,
- Peut être supprimé avant expiration,
- Reste en base après expiration,
- Différent d'une option.
17. Un même contenu est présent
sur plusieurs pages.
Ex : derniers commentaires, derniers articles en sidebar ...
En front-office
18. Un même contenu est présent
sur plusieurs pages.
Un contenu provenant d'une
requête externe.
Ex : derniers commentaires, derniers articles en sidebar ...
Ex : nombre de followers, derniers tweets ...
En front-office
19. Un même contenu est présent
sur plusieurs pages.
Un contenu provenant d'une
requête externe.
Ex : derniers commentaires, derniers articles en sidebar ...
Ex : nombre de followers, derniers tweets ...
Une requête maison coûteuse.
Ex : grosse requête avec jointures dans des tables maison
En front-office
46. set_transient(
$transient,
$value,
$expiration=0
)
Les fonctions de base
- Une durée en sec.
et pas une date.
- Âge maximal et
non pas garantie
d'expiration.
Si cache objet, possiblement supprimé plus tôt.
0 + pas de cache objet = toujours en BDD.
Attention à AUTOLOAD !
51. get_transient(
$transient
)
Les fonctions de base
Vérifier avec
=== false
Le transient n'est supprimé que maintenant si son
délai est expiré, sinon il reste en base de données.
52. get_transient(
$transient
)
Les fonctions de base
Vérifier avec
=== false
Le transient n'est supprimé que maintenant si son
délai est expiré, sinon il reste en base de données.
Attention ne déclenche pas le hook action :
- "delete_transient_$transient" ;
Mais :
- "delete_option_transient_$transient",
-
"delete_option_transient_timeout_$transient",
53. Démo de get_transient()
// Sans transient
function baw_get_my_data() {
$data = my_external_api_request();
// Do something with $data.
return $data;
}
54. Démo de get_transient()
// Avec transient
function baw_get_my_data() {
$data = get_transient( 'baw_data' );
if ( false === $data ) {
$data = my_external_api_request();
set_transient( 'baw_data', $data, DAY_IN_SECONDS );
}
// Do something with $data.
return $data;
}
55. Démo de get_transient()
// Avec cache persistant
function baw_get_my_data() {
$data = wp_cache_get( 'baw_data', 'baw' );
if ( false === $data ) {
$data = my_external_api_request();
wp_cache_set( 'baw_data', $data, 'baw', DAY_IN_SECONDS );
}
// Do something with $data.
return $data;
}
56. Démo de get_transient()
// Avec transient
function baw_get_my_data() {
$data = get_transient( 'baw_data' );
if ( false === $data ) {
$data = my_external_api_request();
set_transient( 'baw_data', $data, DAY_IN_SECONDS );
}
// Do something with $data.
return $data;
}
62. Démo de delete_transient()
add_action( 'wp_scheduled_delete', 'delete_expired_db_transients' );
function delete_expired_db_transients() {
if ( wp_using_ext_object_cache() ) { // magic
return;
}
global $wpdb;
$time = isset( $_SERVER['REQUEST_TIME'] ) ? (int) $_SERVER
['REQUEST_TIME'] : time();
$expired = $wpdb->get_col( "SELECT option_name FROM {$wpdb->options}
WHERE option_name LIKE '_transient_timeout%' AND option_value < {$time};"
);
foreach ( $expired as $transient ) {
$key = str_replace( '_transient_timeout_', '', $transient );
delete_transient( $key );
}
}
// by @rarst - http://tinyurl.com/purge-transients
63. delete_transient(
$transient
)
Les fonctions de base
Attention à la fausse bonne idée de purge :
delete_option( "_transient_$transient" );
Car ne fonctionne pas pour le cache objet !
Déclenche le hook action :
- "delete_transient_$transient" ;