חיפוש ]

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

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

אך מדוע קובץ זה גורם לבעיות מהבחינה הזו? במאמר הבא אנסה להסביר את הגורם לבעיה ודרכים לפתרונה.

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

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

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 בשרת וגם ברמת תוספים המבצעים קריאות מרובות לקובץ זה. נכון אולי יהיה למצוא תוספים חלופיים במקרה זה.

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

רועי יוסף
רועי יוסף

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

  • רוב 22 ינואר 2017, 8:18

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

  • עמרי ביטון 6 מרץ 2018, 5:48

    היי, תודה על המאמרים המדהימים, לומד ממך המון! זה לא מובן מאליו …

    התקנתי את הפלאג, אך כנראה הוא התעדכן מאז הכתבה הזאת.
    מה אני צריך להגדיר כאן? צילמתי מסך ↓
    https://prnt.sc/iney6z

    תודה רבה

    • רועי יוסף 6 מרץ 2018, 23:16

      תודה עמרי! 🙂

      תחת Heartbeat Behaviour תשנה ל Modify. סמן את שלושתם ותשנה את ה Frequency למטה למה שתחליט….

  • דסי 10 אפריל 2018, 23:33

    תודה רבה רועי על המאמרים המעולים שלך, אין לי מילים! כל פעם שאני נתקעת המקום הראשון שאני עושה חיפוש בנושא, הוא כאן בבלוג הנפלא והמושקע שלך.

    תמשיך לעשות חיל, ולכתוב לנו עוד מאמרים מצוינים ובהירים.

  • ינון 9 יולי 2019, 2:28

    האם אותה בעיה קיימת גם באג'קס לרסט אי פי אי של וורדפרס?

תגובה חדשה

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