הגדרת טעינת JS אסינכרונית עבור 1C-Bitrix

הבעיה של סקריפטים חוסמי רינדור ב-Bitrix הגדרת טעינת JS אסינכרונית עבור 1C-Bitrix היא משימה מרכזית באופטימיזציית ביצועים. בלעדיה, האתר סובל ממשאבים חוסמי רינדור. סימפטום אופייני: Lighthouse מציג "Eliminate render-blocking resources", ומפרט את jQuery, Swi
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
הגדרת טעינת JS אסינכרונית עבור 1C-Bitrix
פשוט
~1 יום

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

שאלות נפוצות

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

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1457
  • 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 לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    879
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1162

הבעיה של סקריפטים חוסמי רינדור בביטריקס

הגדרת טעינה אסינכרונית של JS עבור 1C-Bitrix היא משימה מרכזית באופטימיזציית ביצועים. בלעדיה, האתר סובל ממשאבים חוסמי רינדור. סימפטום אופייני: Lighthouse מציג "Eliminate render-blocking resources", ומפרט את jQuery, Swiper וסקריפטים של רכיבים. הדפדפן מנתח HTML, פוגש את <script src="..."> ללא תכונות, ועוצר את הרינדור עד שהקובץ יורד ומופעל. באתר ביטריקס טיפוסי, יש 5–10 סקריפטים חוסמים כאלה. זה מגדיל את Total Blocking Time ל-2–3 שניות בתצורות ממוצעות, מה שמפחית ישירות את שיעורי ההמרה ואת דירוגי החיפוש. כמפתחים, אנו נתקלים בכך מדי יום ויודעים כיצד לפתור זאת מבלי לשבור פונקציונליות. בנוסף, לפי ויקיפדיה, TBT גבוה נמצא בקורלציה ישירה עם חוויית משתמש ירודה.

מדוע טעינת JS סטנדרטית מאטה את האתר

ביטריקס רושמת סקריפטים דרך CMain::AddHeadScript() ו-Asset::getInstance()->addJs(). השיטה ShowHead() מוציאה אותם ב-<head> ללא defer/async. רכיבים מוסיפים סקריפטים דרך $APPLICATION->AddHeadScript() — אותו דבר. עקיפת התנהגות זו אפשרית רק ברמת התבנית או באמצעות עיבוד חיץ לאחר. ללא התערבות, כל סקריפט הופך לחוסם.

כיצד אנו מגדירים טעינה אסינכרונית בביטריקס

התהליך שלנו מורכב מכמה שלבים:

  1. ניתוח — איסוף פרופיל טעינה דרך PageSpeed Insights ו-Lighthouse, ותיעוד כל הסקריפטים החוסמים.
  2. אסטרטגיה — קביעה אילו סקריפטים ניתן לדחות (defer/async) ואילו חייבים להישאר סינכרוניים (jQuery, core.js).
  3. יישום — פריסת הפתרון הנבחר (OnEndBufferContent או Asset Manager).
  4. בדיקות — אימות שכל הרכיבים פועלים כראוי, והשוואת מדדים לפני ואחרי.
  5. פריסה — ביצוע commit לשינויים ותיעוד.

שיטה יעילה אחת היא שימוש באירוע OnEndBufferContent לעיבוד HTML הסופי:

// local/php_interface/init.php AddEventHandler('main', 'OnEndBufferContent', 'deferScripts'); function deferScripts(string &$content): void { // Добавляем defer всем внешним скриптам, кроме явно исключённых $exclude = ['jquery.min.js', '/bitrix/js/main/core/core.js']; $content = preg_replace_callback( '/<script\s([^>]*src=["\'][^"\']+["\'][^>]*)>/i', function (array $m) use ($exclude): string { foreach ($exclude as $ex) { if (str_contains($m[0], $ex)) { return $m[0]; } } if (str_contains($m[1], 'defer') || str_contains($m[1], 'async')) { return $m[0]; } return '<script ' . $m[1] . ' defer>'; }, $content ); } 

jQuery ו-// local/php_interface/init.php AddEventHandler('main', 'OnEndBufferContent', 'deferScripts'); function deferScripts(string &$content): void { // Добавляем defer всем внешним скриптам, кроме явно исключённых $exclude = ['jquery.min.js', '/bitrix/js/main/core/core.js']; $content = preg_replace_callback( '/<script\s([^>]*src=["\'][^"\']+["\'][^>]*)>/i', function (array $m) use ($exclude): string { foreach ($exclude as $ex) { if (str_contains($m[0], $ex)) { return $m[0]; } } if (str_contains($m[1], 'defer') || str_contains($m[1], 'async')) { return $m[0]; } return '<script ' . $m[1] . ' defer>'; }, $content ); } של ביטריקס אינם נכללים ב-defer — אתחול הרכיבים תלוי בהם. כל השאר מקבל core.js.

Asset Manager וקבוצות תלות

בביטריקס 14+ קיים defer. ניתן לרשום סקריפטים עם מיקום:

\Bitrix\Main\Page\Asset::getInstance()->addJs( '/local/js/mymodule.js', false, // не объединять \Bitrix\Main\Page\Asset::POS_AFTER // после </body> ); 

\Bitrix\Main\Page\Asset ממקם את הסקריפט לפני \Bitrix\Main\Page\Asset::getInstance()->addJs( '/local/js/mymodule.js', false, // не объединять \Bitrix\Main\Page\Asset::POS_AFTER // после </body> ); — למעשה אנלוגי ל-POS_AFTER עבור מודולים עצמאיים. עבור סקריפטים הנדרשים ב-DOM-ready, זה עדיף על </body>.

מתי defer לא עובד

סקריפטים שלא ניתן לדחות ללא השלכות:

  • jQuery, אם סקריפטים אחרים בגוף העמוד קוראים ל-defer בתוך השורה
  • core.js ו-ajax.js של ביטריקס — ליבת BX
  • מוני אנליטיקה, אם הם מודדים זמן עד אינטראקטיביות
  • סקריפטים של בדיקות A/B (הם משנים את ה-DOM לפני הרינדור)

עבור אלה, אנו משתמשים ב-async — הדפדפן מוריד את הקובץ בעדיפות גבוהה, אך סדר הביצוע נשלט על ידי המפתח. אפשרות נוספת היא async, אך רק עבור סקריפטים עצמאיים (מונים, ווידג'טים).

נשווה בין הגישות בטבלה. defer מפחית את TBT פי 7 טוב יותר מאשר טעינה סינכרונית (1,840 ms → 240 ms).

שיטה מתי להשתמש השפעה על ניתוח סדר ביצוע
$() סקריפטים הנדרשים לאחר ניתוח DOM לא חוסם הסדר נשמר
<link rel="preload" as="script"> מונים וווידג'טים עצמאיים לא חוסם לא מובטח
<script defer> סקריפטים קריטיים (jQuery) לא חוסם, אך טוען מוקדם יותר נשלט ידנית
<script async> סקריפטים לפני <link preload> לא חוסם הסדר נשמר
מקרה בוחן: אתר סוכנות נסיעות

סוכנות נסיעות פנתה אלינו: אתר ביטריקס "Start" עם טופס חיפוש בעמוד הבית. TBT ב-Lighthouse היה 1,840 ms. סיבה: 12 סקריפטים ב-POS_AFTER, כולל Swiper 8.1 (120 KB), Fancybox (80 KB), ומפת Yandex (API אסינכרוני, אך האתחול היה חוסם). לאחר הוספת </body> דרך <head> והעברת המפה לאתחול דחוי דרך IntersectionObserver, התוצאות היו:

מדד לפני אחרי
TBT 1,840 ms 240 ms
TTI 6.1 s 2.8 s
ציון ביצועים 34 78

זמן הטעינה ירד ב-2.3 שניות. הלקוח ראה עלייה של 15% בהמרות בזכות המהירות, מה שהוביל לחיסכון משמעותי בתקציב הפרסום ולצמיחה בהכנסות. אנו מבטיחים תוצאות דומות בכל פרויקט — הניסיון שלנו כולל למעלה מ-5 שנים באופטימיזציית אתרי ביטריקס.

מה כלול בהגדרת טעינה אסינכרונית?

אנו מספקים מחזור מלא ומפתח ביד:

  • ניתוח פרופיל הטעינה הנוכחי — דרך PageSpeed Insights, Lighthouse, WebPageTest. זיהוי כל הסקריפטים החוסמים.
  • עיצוב אסטרטגיה — קביעה אילו סקריפטים ניתן לדחות ואילו חייבים להישאר סינכרוניים. התחשבות בתלות בין רכיבים.
  • יישום — פריסת defer/async דרך OnEndBufferContent או Asset Manager, העברת סקריפטים לפוטר, הגדרת preload עבור קריטיים.
  • בדיקות — אימות פונקציונליות (אינטראקטיביות, אנימציות, טפסים) לאחר השינויים. השוואת מדדים לפני/אחרי.
  • פריסה ותיעוד — ביצוע commit לשינויים, מסירת גישה, הדרכת הצוות שלך.

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

מדוע להפקיד עבודה זו בידי מקצוענים?

אנחנו צוות עם ניסיון של 10+ שנים בפיתוח 1C-Bitrix. השלמנו למעלה מ-50 פרויקטים של אופטימיזציית ביצועים, כולל קטלוגים מורכבים וחנויות מקוונות. אנו מבטיחים ללא קונפליקטים לאחר השינויים — כל סקריפט נבדק ידנית. אנו משתמשים בגישות מוסמכות ובתיעוד רשמי מ-ביטריקס ו-MDN Web Docs. הזמן הגדרת טעינה אסינכרונית — קבל ייעוץ מהיר ותוכנית עבודה מדויקת.

קבל ייעוץ חינמי ותוכנית עבודה מדויקת על ידי יצירת קשר איתנו.

לפי MDN Web Docs, תכונת ה-defer מבטיחה ביצוע סקריפטים בסדר הופעתם לאחר ניתוח ה-HTML, מה שמאשר את נכונות הגישה שנבחרה.