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...
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...
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...
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...
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...
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...
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ésent
sur plusieurs pages.
Ex : derniers commentaires, derniers articles en sidebar ...
En front-off...
Un même contenu est présent
sur plusieurs pages.
Un contenu provenant d'une
requête externe.
Ex : derniers commentaires, d...
Un même contenu est présent
sur plusieurs pages.
Un contenu provenant d'une
requête externe.
Ex : derniers commentaires, d...
En back-office
Afficher un message pour un
utilisateur particulier.
Ex : retour d'une validation, erreur personnelle ...
En back-office
Afficher un message pour un
utilisateur particulier.
Ex : retour d'une validation, erreur personnelle ...
En back-office
Afficher un message pour un
utilisateur particulier.
Ex : retour d'une validation, erreur personnelle ...
En back-office
$...
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...
Quelques exemples
● Menus
● Blogroll
● Nuage de mots-clés
● Articles récents
● Derniers comm.
● Toute requête perso.
● Mét...
Quelques exemples
● Menus
● Blogroll
● Nuage de mots-clés
● Articles récents
● Derniers comm.
● Toute requête perso.
● Mét...
Contre exemple
Pas 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( 's...
set_transient(
$transient,
$value,
$expiration=0
)
_transient_
_transient_timeout_
Les fonctions de base
set_transient( 's...
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 seria...
set_transient(
$transient,
$value,
$expiration=0
)
Les fonctions de base
Chaînes,
Entiers,
Tableaux,
Objets,
Données seria...
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 maxima...
set_transient(
$transient,
$value,
$expiration=0
)
Les fonctions de base
- Une durée en sec.
et pas une date.
- Âge maxima...
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 so...
get_transient(
$transient
)
Les fonctions de base
Vérifier avec
=== false
Le transient n'est supprimé que maintenant si so...
Démo de get_transient()
// Sans transient
function baw_get_my_data() {
$data = my_external_api_request();
// Do something ...
Démo de get_transient()
// Avec transient
function baw_get_my_data() {
$data = get_transient( 'baw_data' );
if ( false ===...
Démo de get_transient()
// Avec cache persistant
function baw_get_my_data() {
$data = wp_cache_get( 'baw_data', 'baw' );
i...
Démo de get_transient()
// Avec transient
function baw_get_my_data() {
$data = get_transient( 'baw_data' );
if ( false ===...
Démo de get_transient()
// Pas beau !
$transient = 'my_transient';
$test_timeout = get_option( "_transient_timeout_$transi...
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( "_transien...
Démo de delete_transient()
add_action( 'wp_scheduled_delete', 'delete_expired_db_transients' );
function delete_expired_db...
delete_transient(
$transient
)
Les fonctions de base
Attention à la fausse bonne idée de purge :
delete_option( "_transien...
Qu'est-ce ?
Pourquoi ?
Quand ?
Où ?
Comment ?
Help !
Plugins !
http://wordpress.org/plugins/artiss-transient-cleaner/
http://wordpress.org/plugins/delete-expired-transients/
h...
WordCamp Montreal 2014
Merci !
Questions ?
ou posez les moi
au Happiness Bar ;)
Julio Potier
@boiteaweb
boiteaweb.fr
&
wp-...
Les données transitoires (transients) vous veulent du bien
Prochain SlideShare
Chargement dans…5
×

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

4 260 vues

Publié le

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.

Publié dans : Internet
0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
4 260
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 719
Actions
Partages
0
Téléchargements
14
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. WordCamp Montreal 2014 Les données transitoires vous veulent du bien Julio Potier @boiteaweb boiteaweb.fr & wp-rocket.me
  2. 2. Qu'est-ce ? Pourquoi ? Quand ? Où ? Comment ? Help !
  3. 3. Qu'est-ce ? Pourquoi ? Quand ? Où ? Comment ? Help !
  4. 4. /ˈtræn.zɪənt/ transient : nom commun, • Chose temporaire.
  5. 5. /ˈ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
  6. 6. 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.
  7. 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, - Délai non obligatoire.
  8. 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, - Peut être supprimé avant expiration.
  9. 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, - Reste en base après expiration.
  10. 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, - Différent d'une option.
  11. 11. Qu'est-ce ? Pourquoi ? Quand ? Où ? Comment ? Help !
  12. 12. Système de stockage Gain de performance =
  13. 13. Système de stockage Gain de performance = Système de cache
  14. 14. Qu'est-ce ? Pourquoi ? Quand ? Où ? Comment ? Help !
  15. 15. En front-office
  16. 16. Un même contenu est présent sur plusieurs pages. Ex : derniers commentaires, derniers articles en sidebar ... En front-office
  17. 17. 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
  18. 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 ... Une requête maison coûteuse. Ex : grosse requête avec jointures dans des tables maison En front-office
  19. 19. En back-office
  20. 20. Afficher un message pour un utilisateur particulier. Ex : retour d'une validation, erreur personnelle ... En back-office
  21. 21. Afficher un message pour un utilisateur particulier. Ex : retour d'une validation, erreur personnelle ... En back-office
  22. 22. Afficher un message pour un utilisateur 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>.' );
  23. 23. Qu'est-ce ? Pourquoi ? Quand ? Où ? Comment ? Help !
  24. 24. 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
  25. 25. 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 ?
  26. 26. 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 ?
  27. 27. Contre exemple Pas sur des données live !
  28. 28. Qu'est-ce ? Pourquoi ? Quand ? Où ? Comment ? Help !
  29. 29. BDD ou Cache Objet ? Mise en cache d'un transient sans cache objet
  30. 30. BDD ou Cache Objet ? Mise en cache d'un transient avec cache objet (MemCache)
  31. 31. Les fonctions de base set_transient() get_transient() delete_transient()
  32. 32. Les fonctions de base set_site_transient() get_site_transient() delete_site_transient()
  33. 33. *_site_transient() ne sont PAS des fonctions qui gérent la compatibilité avec les multisites.
  34. 34. set_transient() get_transient() delete_transient() Les fonctions de base
  35. 35. set_transient( $transient, $value, $expiration=0 ) Les fonctions de base
  36. 36. set_transient( $transient, $value, $expiration=0 ) Les fonctions de base
  37. 37. set_transient( $transient, $value, $expiration=0 ) _transient_ _transient_timeout_ Les fonctions de base
  38. 38. 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 !!
  39. 39. 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.
  40. 40. set_transient( $transient, $value, $expiration=0 ) Les fonctions de base
  41. 41. set_transient( $transient, $value, $expiration=0 ) Les fonctions de base Chaînes, Entiers, Tableaux, Objets, Données serialisées. 4 Go max !
  42. 42. 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 !
  43. 43. set_transient( $transient, $value, $expiration=0 ) Les fonctions de base
  44. 44. 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.
  45. 45. 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 !
  46. 46. set_transient() get_transient() delete_transient() Les fonctions de base
  47. 47. get_transient( $transient ) Les fonctions de base
  48. 48. get_transient( $transient ) Les fonctions de base
  49. 49. get_transient( $transient ) Les fonctions de base Vérifier avec === false
  50. 50. 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.
  51. 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. Attention ne déclenche pas le hook action : - "delete_transient_$transient" ; Mais : - "delete_option_transient_$transient", - "delete_option_transient_timeout_$transient",
  52. 52. Démo de get_transient() // Sans transient function baw_get_my_data() { $data = my_external_api_request(); // Do something with $data. return $data; }
  53. 53. 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; }
  54. 54. 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; }
  55. 55. 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; }
  56. 56. 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" ); } // ...
  57. 57. set_transient() get_transient() delete_transient() Les fonctions de base
  58. 58. delete_transient( $transient ) Les fonctions de base
  59. 59. delete_transient( $transient ) Les fonctions de base
  60. 60. 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 !
  61. 61. 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
  62. 62. 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" ;
  63. 63. Qu'est-ce ? Pourquoi ? Quand ? Où ? Comment ? Help !
  64. 64. 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/
  65. 65. WordCamp Montreal 2014 Merci ! Questions ? ou posez les moi au Happiness Bar ;) Julio Potier @boiteaweb boiteaweb.fr & wp-rocket.me

×