תארו לעצמכם: עמוד המוצר שלכם מציג "42 אנשים צופים עכשיו" בעוד שרק שלושה מבקרים אמיתיים נמצאים באתר. בוטים ומונה לא מותאם מעוותים את הנתונים, פוגעים באמון ומעמיסים על השרת. כיוונו את המנגנון הזה עשרות פעמים — מקטלוגים קטנים ועד פרויקטים עם מיליון מבקרים בחודש. הגישה חייבת להיות מהירה, סבירה וקלה על השרת. שימוש ב-Redis במקום MySQL יכול להפחית את עלויות משאבי השרת בעד 40%.
בעיות אופייניות
- נתונים מיושנים: עדכון פעם בדקה הופך את המספרים ללא רלוונטיים.
- עומס על מסד הנתונים: כל בקשה לעמוד פוגעת במסד הנתונים.
- עיוות על ידי בוטים: ללא סינון מתאים, המונה מציג 100+ "אנשים" כאשר רק מעטים הם אמיתיים.
- חלון פעילות אופטימלי: 5–10 דקות, סף תצוגה מינימלי: 2 צופים.
מה המשמעות של "צופים עכשיו"
בפועל, אנו סופרים משתמשים שפתחו עמוד מוצר ב-2–15 הדקות האחרונות (החנות בוחרת את החלון). בחירה אופיינית: 5–10 דקות.
שתי אסטרטגיות אחסון עיקריות: אפשרות 1 — טבלת MySQL/PostgreSQL. צרו bl_product_viewers:
CREATE TABLE bl_product_viewers ( id INT AUTO_INCREMENT PRIMARY KEY, product_id INT NOT NULL, session_id VARCHAR(64) NOT NULL, last_seen DATETIME NOT NULL, INDEX idx_product_time (product_id, last_seen) ); בכל צפייה, הכנס או עדכן את הרשומה לפי CREATE TABLE bl_product_viewers ( id INT AUTO_INCREMENT PRIMARY KEY, product_id INT NOT NULL, session_id VARCHAR(64) NOT NULL, last_seen DATETIME NOT NULL, INDEX idx_product_time (product_id, last_seen) ); . ספירה: (product_id, session_id). סוכן ניקוי רץ כל 10 דקות.
אפשרות 2 — Redis. המפתח SELECT COUNT(DISTINCT session_id) WHERE product_id = ? AND last_seen > NOW() - INTERVAL 5 MINUTE הוא קבוצה ממוינת עם ציון = חותמת זמן, חבר = session_id. ספירה: viewers:product:{id}. הסר רשומות מיושנות עם ZCOUNT viewers:product:123 (NOW-300) +inf. מהיר יותר ומונע עומס על מסד הנתונים, אך דורש Redis על השרת.
למה Redis?
Redis מספק קריאות/כתיבות בפחות ממילישנייה — בערך פי 10 מהר יותר מ-MySQL לפעולות מונה. הוא מוריד עומס מ-MySQL ומפחית עלויות שרת בעד 40%. תגובות AJAX הופכות למהירות.
יישום ב-Bitrix
ב-ZREMRANGEBYSCORE של עמוד פרטי המוצר, רשמו כל ביקור:
$productId = $arResult["ID"]; $sessionId = session_id(); $now = date("Y-m-d H:i:s"); $DB->Query("INSERT INTO bl_product_viewers (product_id, session_id, last_seen) VALUES (" . intval($productId) . ", '" . $DB->ForSql($sessionId) . "', '" . $now . "') ON DUPLICATE KEY UPDATE last_seen = '" . $now . "'"); העבירו את שאילתת הספירה לבקר AJAX נפרד — לעולם אל תריצו component_epilog.php באפילוג. למדו עוד על $productId = $arResult["ID"]; $sessionId = session_id(); $now = date("Y-m-d H:i:s"); $DB->Query("INSERT INTO bl_product_viewers (product_id, session_id, last_seen) VALUES (" . intval($productId) . ", '" . $DB->ForSql($sessionId) . "', '" . $now . "') ON DUPLICATE KEY UPDATE last_seen = '" . $now . "'"); בתיעוד הרשמי של Bitrix.
עדכון מונה AJAX
בצד הלקוח, רעננו ללא טעינה מחדש:
setInterval(() => { fetch('/ajax/product-viewers/?id=' + productId) .then(r => r.json()) .then(data => { if (data.count > 1) { document.querySelector('.viewers-count').textContent = 'Сейчас смотрят: ' + data.count; } }); }, 30000); רשמו את מטפל ה-AJAX ב-Bitrix דרך setInterval(() => { fetch('/ajax/product-viewers/?id=' + productId) .then(r => r.json()) .then(data => { if (data.count > 1) { document.querySelector('.viewers-count').textContent = 'Сейчас смотрят: ' + data.count; } }); }, 30000); או כקובץ PHP עצמאי הכולל את הליבה.
הרחקת בוטים
סננו לפי User-Agent ב-CModule::AddAutoloadClasses() לפני הרישום. השתמשו בביטוי רגולרי התואם require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php', component_epilog.php, bot וכו'. זה חובה — בלעדיו, המספרים מנופחים ב-30–40%. עבור מנגנוני Bitrix מובנים, ניתן להשתמש ב-crawler ו-spider, אך זה לא חוסם בוטים של מנועי חיפוש.
התקנה שלב אחר שלב
- בחרו אחסון: MySQL לפרויקטים קטנים, Redis לעומס גבוה.
- צרו מבנה נתונים: טבלה או קבוצה ממוינת.
- רשמו ביקורים: ב-
BITRIX_SESSIDעם סינון בוטים. - בקר AJAX: מחזיר JSON עם מספר הצופים הפעילים.
- JS בצד הלקוח: מעדכן את המונה כל 30 שניות.
- סוכן ניקוי: שאילתת SQL עבור MySQL,
IsUserAuthorizedאו ניקוי רקע עבור Redis. - הגדירו ספים והטיות: לפלט מלוטש.
השוואת אחסון
| פרמטר | MySQL/PostgreSQL | Redis |
|---|---|---|
| מהירות כתיבה | ~5 אלפיות השנייה | <1 אלפית השנייה |
| מהירות קריאה | ~3 אלפיות השנייה (עם אינדקס) | <0.5 אלפית השנייה |
| עומס על השרת | בינוני (קלט/פלט דיסק) | נמוך (RAM) |
| דרישות | מסד נתונים קיים | התקנת Redis |
| מדרגיות | אופקית | אנכית |
שלבי עבודה
| שלב | תיאור | זמן |
|---|---|---|
| ניתוח | בחירת חלון פעילות, הערכת עומס | שעתיים |
| עיצוב | בחירת אחסון, תכנון סכימה | שעה |
| יישום | רישום ביקורים, בקר AJAX, JS | 4–6 שעות |
| בדיקות | בדיקות בוטים, בדיקות עומס | שעתיים |
| פריסה | הגדרת סוכנים, מטמון | שעה |
מה כלול
- יצירת טבלת
component_epilog.php(או מבנה מפתחות Redis) - רישום ביקורים ב-
EXPIREעם סינון בוטים - בקר AJAX המחזיר מספר צופים חי
- רכיב JavaScript לעדכונים תקופתיים
- סוכן ניקוי לרשומות מיושנות
- בלוק פלט עם תנאים מתאימים (סף, הטיה)
צרו קשר — ניישם זאת במפתח מלא תוך 1–3 ימים. עם ניסיון של למעלה מ-5 שנים ו-50+ פרויקטי מונים מותאמים מוצלחים, המומחים המוסמכים שלנו ב-Bitrix מבטיחים פריסה אמינה. מונה המבקרים בזמן אמת זה משמש כווידג'ט הוכחה חברתית חזק, ומגביר את אופטימיזציית ההמרות. עם סינון בוטים מובטח ומטמון Redis מוכח, אתם חוסכים עד 40% על משאבי שרת בהשוואה לגישת MySQL בלבד — זה 200–400 דולר לחודש עבור חנויות עם תנועה בינונית. עבור חנויות עם תנועה גבוהה, החיסכון יכול לעלות על 500 דולר לחודש. הצוות שלנו משתמש בתכונות מתקדמות של Bitrix Framework כמו bl_product_viewers, פונקציות סוכנים ומטפלי אירועים כדי להבטיח אינטגרציה חלקה. בנוסף, אנו מנצלים מנועי מטמון וטכניקות אתר מורכבות כדי להפחית עוד יותר את העומס.
יישום זה מכסה את מונה צפיות המוצר של Bitrix עם עדכון מונה AJAX, סינון בוטים ו-Redis למונים כדי לבנות מונה מבקרים אמין בזמן אמת המשמש כווידג'ט הוכחה חברתית ומגביר את אופטימיזציית ההמרות תוך חיסכון במשאבי שרת.







