פעימות הלב של וורדפרס – WordPress Heartbeat API

פעימות הלב של וורדפרס וכיצד הן משפיעות על האתר שלכם.

כל מי שקורא את הבלוג שלי יודע כי אני בעל OCD בכל מה שקשור לאופטימיזציה ומהירות של אתרי וורדפרס. אם נתקלתם במאמר זה, סביר להניח שאתם מנסים להבין מה גורם לאתר הוורדפרס שלכם להיות איטי וזאת לאחר שביצעתם אופטימיזציה למהירות ממדריכים שונים וכנראה שכבר הגעתם למסקנה כי האשמה נופלת על הקובץ admin-ajax.php. אך מדוע קובץ זה גורם לבעיות מהבחינה הזו? במאמר הבא אנסה להסביר את הגורם לבעיה ודרכים לפתרונה.

ישנם שתי בעיות מרכזיות עם admin-ajax.php:

1. הליבה של וורדפרס (WordPress Core) – במקרה זה יוצרת שימוש מופרז ובהרבה מקרים מיותר ב CPU של השרת.
2. תוספים של מפתחים (Developer Plugins) – במקרה זה הבעיה היא ברמת ה Frontend ומהירות האתר שלכם.

ישנו עדכון שיצא בגירסת וורדפרס 4.1 אשר שיפר את המצב על ידי כיבוי המנגנון כאשר לא קיימת פעילות בחלון. עם זאת, הרבה אנשים עדיין חווים בעיות עם הנושא ואני אחד מהם.

admin-ajax.php וענייני CPU

בגירסת וורדפרס 3.6 הוצג לראשונה WordPress Heartbeat API המאפשר לוורדפרס לתקשר בין הדפדפן לשרת. API זה מאפשר ניהול סשיינים, מעקב אחר גירסאות פוסטים ושמירה אוטומטית של פוסטים באתר הוורדפרס שלכם.

WordPress Heartbeat API משתמש בקובץ /wp-admin/admin-ajax.php בכדי לבצע קריאות AJAX מהדפדפן שלכם, מה שבתאוריה מאד נחמד מכיוון ווורדפרס יכולה לעקוב אחרי מה שקורה בממשק הניהול של האתר שלכם. עם זאת, פונקציונליות זו גם שולחת המון בקשות לקובץ admin-ajax.php שיכולות להוביל לשימוש גבוה ב CPU בשרת שלכם והרבה מאד קריאות PHP.

חברת האחסון Inmotion Hosting כתבה מאמר מעניין בנושא זה.

לדוגמא, בכל פעם שקיים בדפדפן שלכם דף פתוח המשתמש ב Heartbeat API (כל עמוד בממשק הניהול לצורך העניין), נוצר פוטנציאלית מצב של שימוש מופרז בכח העיבוד (CPU) של השרת שלכם וזאת מכיוון ונשלחות כל הזמן בקשות POST לקובץ זה במרווחי זמן קבועים. נתייחס לבקשות אלו כאל ״פעימות הלב״ של וורדפרס. שימו לב בוידאו הבא לאותן פעימות אשר מתבצעות כשדף העריכה של פוסט זה פתוח (הוידאו הינו במהירות מוגברת בשביל שלא תתייבשו)…

 

עכשיו חישבו על אתר וורדפרס לו הרבה מאד עורכים להם פתוחים מספר טאבים בדפדפן עם עמוד כלשהו בממשק הניהול של וורדפרס – מספר הקריאות לשרת יכול להגיע לכמויות עצומות.

אז מה עושים? לשמחתנו, ישנו תוסף חינמי ומעולה בשם Heartbeat Control אשר עוזר לנו לפתור את הבעיה. עקבו אחר ההוראות על מנת להגדיר אותו:

על הדרך, הצטרפו לרשימת התפוצה !

שלב ראשון

התקינו את התוסף  Heartbeat Control וגשו להגדרות > Heartbeat Control.

שלב שני

תחת “Control heartbeat locations” יש לכם מספר אפשרויות:

  • Use Default – הגדרות ברירת המחדל של וורדפרס.
  • Disable Everywhere – ביטול הפעימות לגמרי.
  • Disable on Dashboard Page – ביטול הפעימות אך ורק בממשק הניהול.
  • Allow only on post edit pages – אפשר פעימות אך ורק בעמודי עריכת הפוסטים (זו האפשרות בה אני משתמש).

באפשרותכם לבטל פעימות אלו לגמרי אך זכרו כי אלו אחראיות לשמירה אוטומטית של פוסטים, במידה ואתם מנהלים בלוג עם עורכים וסשיינים מרובים יש לקחת זאת בחשבון. בנוסף, ישנם לא מעט תוספים המשתמשים ב Heartbeat API וביטול מוחלט של הפעימות יכול לגרום לתוספים אלו לא לפעול כראוי (לדוגמא התוסף Monarch).

heartbeat locations

שלב שלישי

יש לכם את האפשרות לקבוע את התדירות של הפעימות. ברירת המחדל הינה לבצע פעימה כל 15 שניות כאשר מסך העריכה של פוסט פעיל. אני מעדיף להגדיר זאת ל 60 שניות.

Heartbeat Intervals

ניתן גם לשנות את המרווח בין פעימות על ידי הוספת הקוד הבא לקובץ functions.php ולשנות את ההגדרה בהתאם:

function my_heartbeat_settings( $settings ) {
    $settings['interval'] = 60; //Anything between 15-60
    return $settings;
}
add_filter( 'heartbeat_settings', 'my_heartbeat_settings' );

הגדרות אלו אמורות לטפל ולפתור חלק מהבעיות.

תוספים המשתמשים ב admin-ajax.php

מסתבר כי ישנם הרבה תוספים המשתמשים בקובץ admin-ajax.php ואף שולחים בקשות לשאילתות ואלו משפיעים לרעה על זמן הטעינה של אתר הוורדפרס שלכם. יצא לי לבצע בדיקה למהירות אתר שבניתי דרך GTmetrix וגיליתי כי ישנם מספר קריאות ל admin-ajax.php. יצא כי קריאות אלו הוסיפו כשנייה וחצי לזמן טעינת האתר שזה המון.

כיצד אנו יודעים לבודד איזה תוסף גורם לקריאות אלו? ניתן פשוט לבטל את התוספים אחד אחד, לנקות cache ולבדוק מתי קריאות אלו מפסיקות. ניתן לקבל אינדיקציה לגבי התוסף הגורם לקריאות אלו על ידי מבט ב Response של אותה קריאה ב ל Chrome Developer Tools. זו יכולה לספק לכם רמז על איזה תוסף מבצע קריאות אלו.

תוספים המשתמשים ב admin-ajax.php

הערה: זה שקיימת קריאה לקובץ זה אינה אומרת בהכרח כי מהירות האתר שלכם נפגעת, מכיוון ומספר דברים נטענים בצורה אסינכרונית ולאחר שהדף נטען. עם זאת, זה עדיין לא יעיל כשמפתחי תוספים כאלו ואחרים שולחים בקשות חוזרות ונשנות לשרת.

לסיכום

אז בבדיקה הבאה שלכם למהירות אתר הוורדפרס שלכם, חשוב שתהיו מודעים כיצד admin-ajax.php יכול להשפיע על האתר שלכם, גם באספקט של ה CPU בשרת וגם ברמת תוספים המבצעים קריאות מרובות לקובץ זה. נכון אולי יהיה למצוא תוספים חלופיים במקרה זה.

מאמרים נוספים הקשורים לשיפור מהירות באתר וורדפרס:

רועי יוסף

מפתח ומעצב וורדפרס, מאמין ביצירת הזדמנויות לעסקים קטנים, סטארטאפים נועזים ואנשים עצמאים לשנות את העולם. אוהב טיפוגרפיה, צבעים וכל מה שבינהם ומכוון לספק אתרי וורדפרס עם ביצועים גבוהים, תמיכה בכל הדפדפנים, בעלי קוד ולידי, סמנטי ונקי. צרו איתי קשר.

תגובות פייסבוק

{ 1 תגובה… הוסף אחת }
  • רוב 22 בינואר 2017, 8:18

    נהדר, קראתי על זה משהו באנגלית, טוב שיש גם מאמר בעברית.
    זה באמת גורם לעומס על השרת, היה לי אתר שעשה את זה

השאירו תגובה

שיתופים
קראו גם את:
בניית פופאם יציאה וורדפרס
בניית פופאפ יציאה בוורדפרס (exit intent)

במדריך זה נסביר איך לבנות פופאפ יציאה בוורדפרס ללא תוסף. המונח פופאפ יציאה (exit intent...