תארו לעצמכם: קטלוג חנות מקוונת על 1С-Bitrix עם 10,000 מוצרים. לכל מוצר יש תמונה בגודל 4000×3000 פיקסלים במשקל 8 MB. ללא שינוי גודל, קבצים אלה מוגשים במלואם בכל בקשה. הדפדפן משנה את גודלם באמצעות CSS, ואתם משלמים על ג'יגה-בייט נוספים של תעבורה ומאבדים מבקרים עקב טעינה איטית. Core Web Vitals נפגעים. משנה הגודל המובנה של Bitrix רחוק מלהיות אופטימלי — איכות 85, GD, ללא יצירה מוקדמת. אנו פותרים בעיה זו באופן מקיף: בוחרים את הספרייה, מגדירים פרמטרים, מגדירים מטמון ויצירה מוקדמת. כתוצאה מכך, אתם חוסכים בין $150–400 בחודש על תעבורה עבור קטלוג של 10,000 פריטים.
למה משנה הגודל המובנה לא עובד
מנגנון שינוי הגודל המובנה של Bitrix משתמש בשני ממשקי API: CFile::ResizeImageFile() הישן מהמודול הראשי (באמצעות GD) וה-\Bitrix\Main\Web\Image החדש (GD או Imagick). שניהם מאחסנים את התוצאה ב-bitrix/cache/resize_cache/. עם זאת, פרמטרי רכיב (למשל, DETAIL_IMAGE_WIDTH ב-bitrix:catalog.element) מוגדרים לעתים קרובות ל-0 — לא מתבצע שינוי גודל, והמקור מוגש. גם אם הפרמטרים מוגדרים, GD עם איכות 85 מופעל כברירת מחדל, וזה איטי ולא אופטימלי לקטלוגים גדולים.
איך לבחור בין GD ל-Imagick
| פרמטר | GD | Imagick |
|---|---|---|
| מהירות על קבצים גדולים | איטי | מהיר (CPU/SSE) |
| איכות בעת הקטנה | בינונית | גבוהה (מסנני Lanczos) |
| תמיכה בפורמטים | JPEG, PNG, GIF | + WebP, TIFF, PSD, RAW |
| צריכת זיכרון | ~128 MB ל-30 MP | ~256 MB ל-30 MP |
| התקנה | מובנה ב-PHP | דורש php-imagick |
Imagick מהיר יותר ואיכותי יותר. ניתן להחליף בשורה אחת או דרך לוח הניהול:
\Bitrix\Main\Config\Option::set('main', 'image_handler', 'imagick'); בדקו התקנה: \Bitrix\Main\Config\Option::set('main', 'image_handler', 'imagick'); . ב-Bitrix VM Imagick קיים, ב-PHP-FPM רגיל — php -r "echo extension_loaded('imagick') ? 'Imagick OK' : 'No Imagick';" או apt install php-imagick. מידע נוסף על יתרונות Imagick ניתן למצוא בויקיפדיה.
הגדרת איכות ואלגוריתם
\Bitrix\Main\Config\Option::set('main', 'image_resize_quality', '82'); \Bitrix\Main\Config\Option::set('main', 'image_resize_png_quality', '7'); 82 עבור JPEG הוא פשרה בין גודל לאיכות. עבור PNG, 7 מתוך 9.
מצבי שינוי גודל ויישומם
| קבוע | התנהגות | יישום |
|---|---|---|
yum install php-imagick |
מידות מדויקות עם חיתוך | אייקונים, תמונות פרופיל |
\Bitrix\Main\Config\Option::set('main', 'image_resize_quality', '82'); \Bitrix\Main\Config\Option::set('main', 'image_resize_png_quality', '7'); |
פרופורציונלי, מתאים בפנים | כרטיסי מוצר |
BX_RESIZE_IMAGE_EXACT |
פרופורציונלי ללא גבולות | סליידרים, באנרים |
בתבנית רכיב:
$arFile = CFile::ResizeImageGet( $arResult['DETAIL_PICTURE'], ['width' => 800, 'height' => 600], BX_RESIZE_IMAGE_PROPORTIONAL, false ); מתי צריך יצירה מוקדמת של תצוגות מקדימות?
בביקור הראשון של המשתמש, שינוי הגודל מתבצע תוך כדי תנועה — מה שגורם לעומס CPU ועיכוב. יצירה מוקדמת באמצעות מטפל האירועים BX_RESIZE_IMAGE_PROPORTIONAL יוצרת תצוגות מקדימות מיד לאחר העלאת הקובץ:
AddEventHandler('main', 'OnAfterFileAdd', function($arFields) { if (in_array($arFields['CONTENT_TYPE'], ['image/jpeg', 'image/png'])) { CFile::ResizeImageGet($arFields['ID'], ['width' => 1200, 'height' => 900], BX_RESIZE_IMAGE_PROPORTIONAL); CFile::ResizeImageGet($arFields['ID'], ['width' => 400, 'height' => 300], BX_RESIZE_IMAGE_PROPORTIONAL); } }); מגבלות וניקוי מטמון
שינוי גודל של תמונות מעל 30 MP דורש BX_RESIZE_IMAGE_PROPORTIONAL_ALT, $arFile = CFile::ResizeImageGet( $arResult['DETAIL_PICTURE'], ['width' => 800, 'height' => 600], BX_RESIZE_IMAGE_PROPORTIONAL, false ); . עבור Imagick, הוסיפו גם OnAfterFileAdd.
מטמון התצוגות המקדימות לא מתנקה אוטומטית בעת החלפת קובץ. ניקוי בטוח לפי תאריך:
// удаление кеша старше 30 дней BXClearCache(true, '/'); חלופה היא סקריפט המשתמש ב-AddEventHandler('main', 'OnAfterFileAdd', function($arFields) { if (in_array($arFields['CONTENT_TYPE'], ['image/jpeg', 'image/png'])) { CFile::ResizeImageGet($arFields['ID'], ['width' => 1200, 'height' => 900], BX_RESIZE_IMAGE_PROPORTIONAL); CFile::ResizeImageGet($arFields['ID'], ['width' => 400, 'height' => 300], BX_RESIZE_IMAGE_PROPORTIONAL); } }); , אך אנו מעדיפים את הגישה התכנותית.
איך אנו מגדירים שינוי גודל: תהליך ומקרה בוחן
הפרויקט האופייני שלנו — חנות מקוונת עם 50,000 מוצרים. מצב התחלתי: GD, איכות 85, ללא יצירה מוקדמת, זמן טעינת דף קטלוג 8 שניות. עשינו:
- ביקורת הגדרות נוכחיות —
memory_limit = 256M, דרייבר, פרמטרי רכיב. - הפעלנו Imagick, הגדרנו איכות ל-82.
- כתבנו מטפל יצירה מוקדמת לקבצים חדשים.
- עדכנו תבניות רכיב — הגדרנו גדלים ומצבים נכונים.
- הגדרנו סוכן לניקוי מטמון מיושן פעם בשבוע.
- בדקנו — זמן הטעינה ירד ל-2.5 שניות, התעבורה ירדה ב-65%.
מה כלול בעבודה
- ביקורת של תצורת Bitrix והשרת הנוכחית.
- בחירה והפעלה של הדרייבר האופטימלי (GD/Imagick).
- הגדרת איכות ומצבי שינוי גודל לכל הרכיבים.
- פיתוח והטמעה של יצירה מוקדמת של תצוגות מקדימות.
- אופטימיזציה של פרמטרי PHP (memory_limit, max_execution_time).
- הגדרת ניקוי מטמון אוטומטי.
- תיעוד כל השינויים שבוצעו.
- אחריות ל-12 חודשים על ההגדרות.
לוח זמנים ותמחור
לוח זמנים משוער — בין 2 ל-5 ימי עבודה בהתאם לגודל הקטלוג ומורכבות התבנית. התמחור מחושב באופן אישי לאחר ביקורת. קבלו ייעוץ — כתבו לנו, נעריך את הפרויקט שלכם.
טעויות נפוצות בהגדרה עצמית
- הגדרת
max_execution_time = 60מתחת ל-128 MB — שינוי הגודל נכשל עם מסך לבן. - התעלמות מפרמטרי רכיב — שינוי הגודל לא עובד, המקור מוגש.
- שימוש ב-GD כאשר Imagick זמין — עומס מיותר.
- חוסר יצירה מוקדמת — טעינה איטית למבקרים ראשונים.
- מטמון לא מנוקה לאחר החלפת תמונה — משתמשים רואים תמונות ישנות.
הניסיון שלנו של למעלה מ-10 שנים ויותר מ-500 פרויקטים על Bitrix מבטיח שאחרי הגדרת שינוי הגודל, החנות שלכם תפעל מהר יותר ו-Core Web Vitals יהיו באזור הירוק. הזמינו ביקורת וכיוונון כבר עכשיו. המלצות לאופטימיזציה של תמונות מתוארות גם בתיעוד Google PageSpeed Insights.







