פרופילינג לקוד PHP ב-1C-Bitrix (Xdebug, Blackfire)
אנו נתקלים לעיתים קרובות במצבים שבהם אתר על Bitrix נטען תוך 4–6 שניות, למרות ש-nginx ו-MySQL תקינים. PHP מבזבז את עיקר הזמן על פעולות לא ברורות. ללא פרופילר מדובר בניחושים. עם פרופילר — מספרים מדויקים: איזו פונקציה, כמה פעמים נקראה, כמה זמן לקחה. נסקור שני כלים עובדים — Xdebug ו-Blackfire — ונראה כיצד למצוא ולתקן צווארי בקבוק. בהתבסס על הניסיון שלנו (10+ שנים, 500+ פרויקטים) אנו מבטיחים תוצאות שקופות. חיסכון בתקציב הפיתוח לאחר אופטימיזציה יכול להגיע ל-$500–2k בהתאם למורכבות.
מדוע פרופילינג קריטי עבור Bitrix
בקטלוגים מורכבים עם אלפי בלוקי מידע ורכיבים, הביצועים מתדרדרים באופן בלתי מורגש. עמוד אחד יכול לקרוא ל-CIBlockElement::GetList() 40 פעמים ללא קישור. או שסוכן מחשב מחדש סלי קניות כל 5 דקות. ללא פרופילר בעיות כאלה גוזלות שעות חיפוש. עם פרופילר — 10 דקות למדידה, ומיד יודעים לאן להסתכל. חיסכון בזמן מפתח עד 70%.
Xdebug: פרופילינג דרך cachegrind
Xdebug הוא הרחבת PHP הרושמת טראסות בפורמט cachegrind. הקובץ נפתח ב-KCachegrind או QCacheGrind. התקנה והגדרה:
pecl install xdebug # или apt-get install php8.2-xdebug # php.ini или 99-xdebug.ini [xdebug] zend_extension=xdebug.so xdebug.mode=profile xdebug.output_dir=/tmp/xdebug xdebug.profiler_output_name=callgrind.out.%p.%r xdebug.start_with_request=trigger pecl install xdebug # или apt-get install php8.2-xdebug # php.ini или 99-xdebug.ini [xdebug] zend_extension=xdebug.so xdebug.mode=profile xdebug.output_dir=/tmp/xdebug xdebug.profiler_output_name=callgrind.out.%p.%r xdebug.start_with_request=trigger מפעיל פרופילינג רק דרך פרמטר GET start_with_request=trigger או cookie. אל תפעילו את ?XDEBUG_PROFILE=1 בפרודקשן — תקורה של 10–20x. לפי התיעוד של Xdebug, מצב הפרופילינג מיועד לפיתוח, לא לשרתי פרודקשן (xdebug.org/docs/profiler).
פרופילינג של בקשה:
curl "https://site.ru/catalog/product/?XDEBUG_PROFILE=1" -o /dev/null הקובץ always מופיע ב-curl "https://site.ru/catalog/product/?XDEBUG_PROFILE=1" -o /dev/null . פתחו אותו ב-KCachegrind — עץ קריאות ואחוז זמן לכל פונקציה.
מה לחפש בפרופיל Bitrix
צווארי בקבוק טיפוסיים הנראים ב-cachegrind:
-
/tmp/xdebug— נקרא עשרות פעמים ללא קישור. זמן כולל >30% מצביע על בעיות בקישור רכיבים. -
callgrind.out.*— פילטרים מורכבים ללא אינדקסים. -
CIBlockElement::GetList()— 20+ רכיבים מקוננים צוברים תקורה. -
CSQLWhere::GetQuery()— לא מקושר בין קריאות. -
CBitrixComponent::includeComponent()—CUser::IsAuthorized()על בחירות גדולות ללא מגבלה.
איזה כלי לבחור: Xdebug או Blackfire?
| קריטריון | Xdebug cachegrind | Blackfire |
|---|---|---|
| תקורה | ~10–20x האטה | ~2x |
| נוחות ניתוח | KCachegrind (שולחן עבודה) | ממשק אינטרנט, גרף |
| השוואת פרופילים | ידנית | Diff מובנה |
| סקריפטים CLI | כן | כן |
| פרודקשן | לא | כן (בזהירות) |
| עלות | חינם | Freemium |
Blackfire עובד פי 5–10 מהר יותר מ-Xdebug בפרודקשן ומתאים לפרופילינג רציף. Xdebug עדיף לניתוח מעמיק בשרת פיתוח.
Blackfire: פרופילינג עם אגרגציה
Blackfire הוא פתרון SaaS. סוכן על השרת, הרחבת PHP מיירטת את הביצוע, הנתונים נשלחים ל-blackfire.io. התקנה והגדרה:
wget -O - https://packages.blackfire.io/gpg.key | apt-key add - echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list apt-get update && apt-get install blackfire blackfire-php # php.ini extension=blackfire.so blackfire.agent_socket=tcp://127.0.0.1:8307 # Авторизация blackfire agent:config --server-id=XXXX --server-token=YYYY blackfire agent:start הפעלת פרופילינג:
# CLI blackfire run php artisan bitrix:some-command # Через curl blackfire curl https://site.ru/catalog/ # Через браузерное расширение Blackfire — кнопка Profile на странице. אלגוריתם אופטימיזציה מעשי
תוכנית שלב אחר שלב
1. מדידה בסיסית. פרופיל את העמוד, רשום את 5 הפונקציות המובילות בזמן. 2. ניתוח שורש. הסתכל על מחסנית הקריאות — מי קורא לפונקציה היקרה וכמה פעמים. לדוגמה, `GetList` יכול להיקרא 40 פעמים בגלל לולאה ברכיב. 3. קישור. הפעל קישור רכיבים (`CACHE_TYPE=A`, `CACHE_TIME=3600`) או קשר את התוצאה ידנית דרך `\Bitrix\Main\Data\Cache`. 4. מדידה חוזרת. השווה לבסיס. 5. אופטימיזציית שאילתות. הסר שדות מיותרים ב-`$select`, הוסף אינדקסים, שכתב מ-`GetList` ל-D7 ORM.מדוע פרופילינג צריך להיעשות בשרת פיתוח?
Xdebug מוסיף עיכוב משמעותי (10–20x), ולכן השימוש בו בשרת פרודקשן אינו מקובל. אפילו Blackfire עם תקורה נמוכה יכול להשפיע על משתמשים אמיתיים. שרת פיתוח עם עותק נתונים נותן מדידות מדויקות ללא סיכונים עסקיים. אם שרת הפרודקשן אינו זמין לפרופילינג, אנו מגדירים סביבת staging עם סנכרון נתונים. צרו קשר לפרטים על הגדרת הסביבה.
כיצד לקרוא פרופיל cachegrind
KCachegrind מציג עץ קריאות, שבו כל צומת הוא פונקציה עם זמן ביצוע (self לעומת inclusive). חפשו פונקציות שבהן זמן inclusive עולה על 10% מהזמן הכולל. עבור Bitrix אלה לעיתים קרובות \Bitrix\Main\ORM\Query\Query::exec(), fetchAll() ו-wget -O - https://packages.blackfire.io/gpg.key | apt-key add - echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list apt-get update && apt-get install blackfire blackfire-php # php.ini extension=blackfire.so blackfire.agent_socket=tcp://127.0.0.1:8307 # Авторизация blackfire agent:config --server-id=XXXX --server-token=YYYY blackfire agent:start . הפעילו פילטר למודול # CLI blackfire run php artisan bitrix:some-command # Через curl blackfire curl https://site.ru/catalog/ # Через браузерное расширение Blackfire — кнопка Profile на странице. — הוא יסנן את כל פונקציות הליבה של PHP. הזמינו פרופילינג וקבלו ניתוח מפורט מהמהנדסים שלנו.
פרופילינג של סוכנים ו-CLI
עבור סוכני רקע וסקריפטים CLI השתמשו ב-CIBlockElement::GetList או CSQLWhere::GetQuery. דוגמה:
XDEBUG_MODE=profile php /path/to/script.php blackfire run php /path/to/script.php זה עוזר לזהות סוכנים איטיים שמאטים את הביצועים ברקע.
מה כוללת העבודה שלנו
- הגדרת Xdebug ו/או Blackfire בשרת פיתוח או staging.
- פרופילינג של 3–5 עמודים/סקריפטים מרכזיים.
- דוח מפורט עם גרפי קריאות ותזמונים.
- המלצות אופטימיזציה (קישור, אינדקסים, רפקטורינג).
- פרופילינג חוזר לאחר יישום התיקונים.
- תיעוד סופי וייעוץ לצוות.
לוחות זמנים
| משימה | משך |
|---|---|
| הגדרת פרופילר | 2–6 שעות |
| פרופילינג + דוח לעמוד אחד | 2–4 שעות |
| ביקורת מקיפה של 3–5 עמודים | 2–5 ימים |
| אופטימיזציית צווארי בקבוק | מ-3 ימים |
התמחור אישי בהתאם להיקף. אנו מבטיחים שקיפות — אתם מקבלים לא רק דוח, אלא צווארי בקבוק מתוקנים ושיפור מדיד בביצועים. צרו קשר להערכת הפרויקט — נקבע את היקף העבודה ונציע תוכנית פרופילינג. הזמינו פרופילינג ותראו את היעילות.
משאבים נוספים: פרופילינג (תכנות) ו-Xdebug. לפי התיעוד של Xdebug, מצב הפרופילינג מיועד לפיתוח.







