Transients API הינה סיפרייה לשמירת מידע זמני במסד נתונים על בסיס מפתח (key) וערך (value) עם תאריך תפוגה בטבלת wp_options
ומאפשרת לנו להשתמש במסד נתונים כאמצעי לביצוע Caching במגוון דרכים.
למה להשתמש ב-Transients API?
רוב מפתחי התוספים והתבניות אוהבים להשתמש ב-Options API על מנת לשמור מידע (כגון הגדרות) של התוסף או התבנית שלהם, אך לפעמים נעשה שימוש לא נכון, ונעשה שימוש ב-Options API במקום ב-Transients API.
ההבדל הגדול בין Options API לבין Transients API הוא שב-Transients API ניתן לשמור מידע שיהיה פג תוקף, כלומר, להגדיר לו תוך כמה זמן הוא אמור להמחק מהמסד נתונים.
שימושים אפשריים ל-Transients API
מקרה א׳
האתר שלנו מבצע קריאת API לשירות חיצוני כגון Twitter על מנת להציג את הציוצים האחרונים, במקרה כזה כל טעינה של עמוד תבצע את קריאת ה-API הזאתי, מצב שמוביל לכך שזמן הטעינה של העמוד שלנו מתארך טיפה כי השרת ממתין לקבל את המידע מהשירות החיצוני לפני שהוא ממשיך בהצגת העמוד.
מקרה ב׳
בנינו לאתר שלנו תוסף שסופר את הצפיות שיש למאמרים השונים באתר, אך אנחנו מעוניינים שהצפיות יהיו צפיות יחודיות, לכן אנחנו נשמור במסד נתונים את כתובות ה-IP של הגולשים באתר פר מאמר כך שנוכל לבצע זאת.
ביצוע Caching למידע המוחזר מקריאות API ושמירת מידע אשר יאבד את חשיבותו לאחר X זמן הינם מקרים ברורים אשר מצביעים על כך שעלינו להשתמש ב-Transients API.
איך עובד Transients API?
מרבית סיפריות ה-API ש-WordPress מציעה, מבצעות אינטראקציה עם המסד נתונים, ומכיוון שפנייה למסד נתונים בביצוע שאילתות מורכבות ותכיפות מאטות את עליית האתר, השירותים האלו משתמשים ב-WordPress Object Caching, אשר מבצע שמירה של התוצאות המוחזרות בזיכרון למשך פרק זמן מוגבל על מנת לחסוך במשאבים.
לדוגמא, כאשר העמוד נטען, מתבצעת שאילתת SQL אשר מחזירה את כל התוצאות הקיימות בטבלת wp_options
.
בהמשך הקוד אם תתבצע קריאה לפונקציה get_option
לדוגמא, במקום לגשת למסד נתונים, תתבצע פניה לזיכרון ה-RAM והמידע יוחזר משם במקום מהמסד נתונים, דבר אשר מייעל את הקוד ואת זמן טעינת האתר.
Transients API שומר את המידע במסד נתונים לאורך זמן שהוגדר לו ע״י המפתח בעת יצירת ה-Transient ועובד גם הוא עם WordPress Object Cache.
מקרה זה נכון אך ורק אם אנחנו לא משתמשים בתוסף אשר מפעיל את ה-Persistent Cache, כלומר תוספים כגון W3 Total Cache וכד׳.
במקרה כזה WordPress Object Cache מבצע שמירה של המידע בקבצים בתיקיית wp-content
, דבר אשר מאפשר לנו ליעל את זמן טעינת האתר מכיוון שכעת המידע אינו נשמר לתקופת טעינת העמוד, אלא לאורך פרק זמן המוגדר ע״י התוסף.
שימוש ב-Transients API
טוב, אחרי שהתלכלכנו קצת במושגים והבנו קצת יותר לעומק איך WordPress עובדת, הגיע הזמן להתלכלך בקוד, Transients API כולל 6 פונקציות (נכון לזמן כתיבת המאמר).
שמירת מידע
על מנת לשמור מידע נשתמש בפונקציה set_transient
אשר מקבלת 3 פרמטרים:
- מפתח (key) // מזהה כלשהו אשר בעזרתו נזהה את המידע, אורך המפתח לא יכול עלות על יותר מ-40 תווים.
- ערך (value) // המידע אותו אנחנו רוצים לשמור, ניתן להעביר כמערך או כאובייקט, אין צורך לבצע serialize מכיוון שהפונקציה מטפלת בזה לבד.
- זמן תפוגה // תוחלת החיים של המידע, יש להעביר את הזמן בשניות, לדוגמא שעה = 3600.
set_transient( "dorzki_transient_test", array( "Hello", "World" ), 3600 );
זמן תפוגה
WordPress מאפשרת לנו להשתמש בקבועים (constants) על מנת להגדיר לכמה זמן אנחנו מעוניינים לשמור את המידע.
- דקה //
MINUTE_IN_SECONDS
- שעה //
HOUR_IN_SECONDS
- יום //
DAY_IN_SECONDS
- חודש //
MONTH_IN_SECONDS
- שנה //
YEAR_IN_SECONDS
אחזור מידע
על מנת לקבל את המידע מהמסד, נשתמש בפונקציה get_transient
אשר מקבלת פרטמר אחד – מפתח (key).
$greeting = get_transient( "dorzki_transient_test" );
if( $greeting === false ) {
// Expired...
}
הפונקציה תחזיר false במידה והערך פג תוקף או לא קיים, לכן חשוב לבצע בדיקת פלט לפני המשך הקוד.
מחיקת מידע
במידה והשתמשנו ב-Transients API בתוסף או תבנית, נרצה למחוק את המידע הקיים על מנת לא להשאיר ״זבל״ במסד נתונים, לכן נשתמש בפונקציה delete_transient
אשר מקבלת פרמטר אחד – מפתח (key).
delete_transient( "dorzki_transient_test" );
שימוש ב-Transients API ב-Multisite
במידה ונרצה להשתמש בפונקציות ברשת אתרים (multisite), נצטרך להשתמש בפונקציות דומות – set_site_transient
, get_site_transient
ו-delete_site_transient
.
סיכום
Transients API הינו כלי חזק מאוד אשר מאפשר לנו לשמור מידע זמנית ולא לדאוג לגבי ניפוח של המסד נתונים במידע ״זבל״ אשר מאבד את ערכו לאחר זמן מסויים.