פרופילינג לקוד PHP ב-1C-Bitrix (Xdebug, Blackfire)

פרופילינג לקוד PHP ב-1C-Bitrix (Xdebug, Blackfire) אנו נתקלים לעתים קרובות במצבים שבהם אתר Bitrix נטען תוך 4–6 שניות, למרות ש-nginx ו-MySQL תקינים. PHP מבלה את עיקר הזמן בפעולות לא ברורות. ללא פרופילר, זה ניחוש. עם פרופילר, מספרים מדויקים: אילו פו
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
פרופילינג לקוד PHP ב-1C-Bitrix (Xdebug, Blackfire)
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1164

פרופילינג לקוד 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, מצב הפרופילינג מיועד לפיתוח.