חיפוש ]

אופטימיזציה של הגדרות Heartbeat API עם WP Rocket

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

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

אבל למה הקובץ הזה גורם לבעיות ביצועים? במאמר הזה אסביר את שורש הבעיה ואציג כיצד לשלוט בה בצורה יעילה באמצעות WP Rocket.

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

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

הבנת admin-ajax.php ו-Heartbeat API

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

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

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

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

שימו לב בוידאו הבא לאותן פעימות אשר מתבצעות כשדף העריכה של פוסט זה פתוח (הוידאו הינו במהירות מוגברת בשביל שלא תתייבשו):

אופטימיזציה של Heartbeat API באמצעות WP Rocket

אופטימיזציה של Heartbeat API באמצעות WP Rocket

WP Rocket מציע הגדרות מובנות לניהול ואופטימיזציה של Heartbeat API, שמאפשרות שליטה על ההתנהגות שלו ללא צורך בקוד מותאם אישית. כך תשתמשו ב-WP Rocket כדי לנהל את Heartbeat API:

שלב 1: גשו להגדרות Heartbeat

בממשק הניהול של וורדפרס, גשו אל הגדרות > WP Rocket > Heartbeat. כאן תוכלו לשלוט בהתנהגות Heartbeat API עבור אזורים שונים באתר.

שלב 2: התאימו את התנהגות Heartbeat

WP Rocket מציע שלוש אפשרויות עיקריות לניהול Heartbeat API:

  • Reduce Heartbeat Activity: מפחית את התדירות של קריאות ל-admin-ajax.php מפעם בדקה לפעם בשתי דקות (120 שניות). זוהי האפשרות המומלצת לשמירה על איזון בין ביצועים לפונקציונליות.
  • Disable Heartbeat: מבטל לחלוטין את Heartbeat API באזור הנבחר. השתמשו בזה רק אם אתם בטוחים שזה לא יפגע בפונקציונליות חיונית, כמו שמירה אוטומטית.
  • Do not limit: משאיר את Heartbeat API פעיל ללא הגבלה. זוהי ברירת המחדל.

ניתן להגדיר כל אחת מהאפשרויות הללו בנפרד עבור שלושה אזורים:

  • Backend (ממשק הניהול): שולט על Heartbeat API בלוח הבקרה.
  • Post Editor (עורך הפוסטים): שולט על Heartbeat API במסכי עריכת תוכן.
  • Frontend (החזית): שולט על Heartbeat API בצד הלקוח של האתר.

שלב 3: בחרו את ההגדרות הטובות ביותר

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

  • ממשק הניהול: הפחיתו פעילות או בטלו, שכן אזור זה לא דורש עדכונים תכופים לרוב.
  • עריכת פוסטים: הגדירו להפחתת פעילות כדי לשמור על פיצ׳רים כמו שמירה אוטומטית ונעילת פוסטים (Post Locking).
  • החזית: בטלו לחלוטין אלא אם תוספים מסוימים תלויים בקריאות AJAX דרך Heartbeat.

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

שימו לב: ביטול Heartbeat API בממשק הניהול עלול למנוע מכלי Site Health של וורדפרס לטעון תוצאות כראוי. אם אתם משתמשים ב-Site Health לניטור האתר, העדיפו הפחתת פעילות על פני ביטול מלא.

שליטה ב-Heartbeat API באמצעות קוד PHP

אם אתם מעדיפים שליטה מדויקת יותר ללא תוסף, וורדפרס מספקת את הפילטר heartbeat_settings שמאפשר לשנות את מרווח הפעימות ישירות. לדוגמה, הקוד הבא מגדיר את המרווח ל-120 שניות:

add_filter( 'heartbeat_settings', function( $settings ) {
    $settings['interval'] = 120;
    return $settings;
} );

הערך המינימלי שניתן להגדיר הוא 15 שניות והמקסימלי הוא 120 שניות. שיטה זו שימושית במיוחד אם אתם רוצים להגדיר מרווח ספציפי שאינו זמין דרך ממשק WP Rocket.

כיצד WP Rocket משפר ביצועים

על ידי הפחתת התדירות או ביטול Heartbeat API באזורים לא מנוצלים, WP Rocket מפחית משמעותית את מספר הבקשות הנשלחות ל-admin-ajax.php. צמצום זה מפחית ישירות את העומס על השרת, משפר את יעילות ה-CPU ומשפר את זמני הטעינה של הדפים.

לדוגמה, בחירת האפשרות ״Reduce activity״ ב-WP Rocket מגדילה את המרווח ל-120 שניות במקום ברירת המחדל, דבר שמפחית בצורה משמעותית בקשות מיותרות. ההשפעה מורגשת במיוחד באתרים עם עורכים מרובים או שימוש כבד בממשק הניהול.

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

בנוסף לאופטימיזציה של Heartbeat API, חשוב לזהות תוספים שעושים שימוש מופרז ב-admin-ajax.php.

השתמשו בלשונית ״Network״ ב-Chrome Developer Tools (או בכלי מפתחים מקביל בדפדפן שלכם) כדי לסנן בקשות מסוג admin-ajax.php ולבדוק את הפרמטר action בכל בקשה. כך תוכלו לזהות את התוספים האחראיים לקריאות שרת מרובות ולהחליט האם להגדיר מחדש, להחליף או להשבית אותם.

בואו נראה דוגמה מעשית: פתחו את כלי המפתחים, עברו ללשונית ״Network״, סננו לפי admin-ajax ובדקו את ה-Payload של כל בקשה. הפרמטר action יגלה לכם איזה תוסף או פונקציה יזמו את הקריאה.

שאלות נפוצות

שאלות נפוצות בנושא Heartbeat API ואופטימיזציה של admin-ajax.php:

מה זה Heartbeat API בוורדפרס ולמה הוא משפיע על ביצועי האתר?
Heartbeat API הוא מנגנון מובנה בוורדפרס (מגרסה 3.6) ששולח בקשות AJAX תקופתיות לשרת דרך הקובץ admin-ajax.php. הוא אחראי על שמירה אוטומטית, נעילת פוסטים, התראות על פקיעת סשן ועוד. כל בקשה צורכת משאבי CPU בשרת, ולכן תדירות גבוהה של פעימות עלולה להאט את האתר, במיוחד בשרתים משותפים.
האם ביטול מלא של Heartbeat API עלול לשבור פונקציונליות באתר?
כן. ביטול מלא של Heartbeat API ישבית פיצ׳רים כמו שמירה אוטומטית של טיוטות, נעילת פוסטים (Post Locking) שמונעת עריכה בו-זמנית, והתראות על פקיעת סשן. בנוסף, כלי Site Health של וורדפרס מסתמך על Heartbeat בממשק הניהול. לכן מומלץ להפחית את התדירות במקום לבטל לחלוטין.
מה ההבדל בין ״Reduce activity״ ל-״Disable״ בהגדרות WP Rocket?
האפשרות ״Reduce activity״ מאריכה את המרווח בין פעימות ל-120 שניות (שתי דקות) במקום ברירת המחדל, כך שהפונקציונליות נשמרת אך עם פחות עומס על השרת. האפשרות ״Disable״ מבטלת לחלוטין את Heartbeat API באזור הנבחר, מה שחוסך את כל הבקשות אך עלול לפגוע בפיצ׳רים שתלויים בו.
איך אפשר לזהות אילו תוספים שולחים קריאות מרובות ל-admin-ajax.php?
פתחו את כלי המפתחים בדפדפן (F12), עברו ללשונית ״Network״ וסננו לפי admin-ajax. בכל בקשה, בדקו את הפרמטר action ב-Payload - הוא יגלה לכם איזה תוסף או פונקציה יזמו את הקריאה. כך תוכלו להחליט אם להגדיר מחדש, להחליף או להשבית תוספים בעייתיים.
האם אפשר לשלוט ב-Heartbeat API באמצעות קוד PHP ללא תוסף?
כן. וורדפרס מספקת את הפילטר heartbeat_settings שמאפשר לשנות את מרווח הפעימות. ניתן להגדיר ערך בין 15 ל-120 שניות. לדוגמה, הוספת הקוד $settings['interval'] = 120; בתוך הפילטר תגדיר את המרווח לשתי דקות. שיטה זו מתאימה למפתחים שמעדיפים שליטה מדויקת ללא תוסף נוסף.

לסיכום

ניהול Heartbeat API בוורדפרס הוא חיוני לשמירה על ביצועים מיטביים, במיוחד באתרים עמוסים. WP Rocket מספק דרך אינטואיטיבית לשליטה ב-Heartbeat API, עם אפשרויות גמישות להפחתת עומס על השרת תוך שמירה על פונקציונליות הכרחית.

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

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

דיון ותגובות
6 תגובות  ]
  • רוב 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 והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...

Savvy WordPress Development official logo