Les données transitoires (transients) vous veulent du bien

66
WordCamp Montreal 2014 Les données transitoires vous veulent du bien Julio Potier @boiteaweb boiteaweb.fr & wp-rocket.me

description

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.

Transcript of Les données transitoires (transients) vous veulent du bien

WordCamp Montreal 2014

Les données

transitoires

vous veulent

du bien

Julio Potier@boiteaweb

boiteaweb.fr&

wp-rocket.me

Qu'est-ce ?

Pourquoi ?

Quand ?

Où ?

Comment ?

Help !

Qu'est-ce ?

Pourquoi ?

Quand ?

Où ?

Comment ?

Help !

/ˈtræn.zɪənt/

transient : nom commun,

• Chose temporaire.

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

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.

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.

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.

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.

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.

Qu'est-ce ?

Pourquoi ?

Quand ?

Où ?

Comment ?

Help !

Système de stockage

Gain de performance

=

Système de stockage

Gain de performance

=

Système de cache

Qu'est-ce ?

Pourquoi ?

Quand ?

Où ?

Comment ?

Help !

En front-office

Un même contenu est présentsur plusieurs pages.Ex : derniers commentaires, derniers articles en sidebar ...

En front-office

Un même contenu est présentsur 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

Un même contenu est présentsur 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

En back-office

Afficher un message pour unutilisateur particulier.Ex : retour d'une validation, erreur personnelle ...

En back-office

Afficher un message pour unutilisateur particulier.Ex : retour d'une validation, erreur personnelle ...

En back-office

Afficher un message pour unutilisateur particulier.Ex : retour d'une validation, erreur personnelle ...

En back-office

$delete_result = delete_plugins( $plugins );set_transient( 'plugins_delete_result_' . $user_ID, $delete_result );

$delete_result = get_transient( 'plugins_delete_result_' . $user_ID );delete_transient( 'plugins_delete_result_' . $user_ID );_e( 'The selected plugins have been <strong>deleted</strong>.' );

Qu'est-ce ?

Pourquoi ?

Quand ?

Où ?

Comment ?

Help !

Quelques exemples● Menus

● Blogroll

● Nuage de mots-clés

● Articles récents

● Derniers comm.

● Toute requête perso.

● Météo

● Radio

● Derniers tweets

● Friends/Followers

● Derniers membres

● Articles populaires

Quelques exemples● Menus

● Blogroll

● Nuage de mots-clés

● Articles récents

● Derniers comm.

● Toute requête perso.

● Météo

● Radio

● Derniers tweets

● Friends/Followers

● Derniers membres

● Articles populaires

Expiration manuelle ? Automatique ? Longue ? Courte ?

Quelques exemples● Menus

● Blogroll

● Nuage de mots-clés

● Articles récents

● Derniers comm.

● Toute requête perso.

● Météo

● Radio

● Derniers tweets

● Friends/Followers

● Derniers membres

● Articles populaires

0.5/1h

3/5mn

1/24h

24h

24h

12/24h

man.

man.

man.

man.

man.

?

Expiration manuelle ? Automatique ? Longue ? Courte ?

Contre exemplePas sur des données live !

Qu'est-ce ?

Pourquoi ?

Quand ?

Où ?

Comment ?

Help !

BDD ou Cache Objet ?Mise en cache d'un transient

sans cache objet

BDD ou Cache Objet ?Mise en cache d'un transient

avec cache objet(MemCache)

Les fonctions de base

set_transient()

get_transient()

delete_transient()

Les fonctions de base

set_site_transient()

get_site_transient()

delete_site_transient()

*_site_transient() ne sont PAS des fonctions qui gérent la compatibilité avec les multisites.

set_transient()

get_transient()

delete_transient()

Les fonctions de base

set_transient( $transient, $value, $expiration=0)

Les fonctions de base

set_transient( $transient, $value, $expiration=0)

Les fonctions de base

set_transient( $transient, $value, $expiration=0)

_transient__transient_timeout_

Les fonctions de base

set_transient( $transient, $value, $expiration=0)

_transient__transient_timeout_

Les fonctions de base

set_transient( 'super_plugin_' . md5( $uniq_id ) );// _transient_timeout_super_plugin_d41d8cd98f00b204e9800998ecf8427e= 64 ! MAX !!

set_transient( $transient, $value, $expiration=0)

_transient__transient_timeout_

Les fonctions de base

set_transient( 'super_plugin_' . md5( $uniq_id ) );// _transient_timeout_super_plugin_d41d8cd98f00b204e9800998ecf8427e= 64 ! MAX !!

set_transient( 'super_plugin_' . date( 'dmy' ) );// super_plugin_160814, dès demain ce transient restera en base.

set_transient( $transient, $value, $expiration=0)

Les fonctions de base

set_transient( $transient, $value, $expiration=0)

Les fonctions de base

Chaînes,Entiers,Tableaux,Objets,Données serialisées.

4 Go max !

set_transient( $transient, $value, $expiration=0)

Les fonctions de base

Chaînes,Entiers,Tableaux,Objets,Données serialisées.

PAS SimpleXML Object !

$xml = simplexml_load_file( $file );set_transient( 'xml_file', $xml ); // BOUM!

4 Go max !

set_transient( $transient, $value, $expiration=0)

Les fonctions de base

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.

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 !

set_transient()

get_transient()

delete_transient()

Les fonctions de base

get_transient( $transient)

Les fonctions de base

get_transient( $transient)

Les fonctions de base

get_transient( $transient)

Les fonctions de base

Vérifier avec === false

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.

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",

Démo de get_transient()

// Sans transientfunction baw_get_my_data() {

$data = my_external_api_request();// Do something with $data.return $data;

}

Démo de get_transient()

// Avec transientfunction 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;

}

Démo de get_transient()

// Avec cache persistantfunction 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;

}

Démo de get_transient()

// Avec transientfunction 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;

}

Démo de get_transient()

// Pas beau !$transient = 'my_transient';$test_timeout = get_option( "_transient_timeout_$transient" );if ( $test_timeout > time() ) {

$data = get_option( "_transient_$transient" );}// ...

set_transient()

get_transient()

delete_transient()

Les fonctions de base

delete_transient( $transient)

Les fonctions de base

delete_transient( $transient)

Les fonctions de base

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é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

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" ;

Qu'est-ce ?

Pourquoi ?

Quand ?

Où ?

Comment ?

Help !

Plugins !

http://wordpress.org/plugins/artiss-transient-cleaner/

http://wordpress.org/plugins/delete-expired-transients/

http://wordpress.org/plugins/transients-manager/

http://wordpress.org/plugins/debug-bar-transients/

WordCamp Montreal 2014

Merci !

Questions ?ou posez les moi

au Happiness Bar ;)

Julio Potier@boiteaweb

boiteaweb.fr&

wp-rocket.me