Smart Websites
איך לעצור זליגת טוקנים בכרטיסיות מרובות: מדריך Web Locks API לאפליקציות AI
כשהמשתמשים שלכם פותחים 5 כרטיסיות במקביל, סוכני ה-AI שרצים בדפדפן שורפים תקציבי API ודורסים נתונים. למדו איך לתאם בין כרטיסיות בעזרת Web Locks API.
TL;DR
כשמשתמש פותח 4 כרטיסיות של אפליקציית ה-AI שלכם, כל כרטיסייה מנסה להפעיל סוכן AI ברקע. הצירוף הזה שורף טוקנים יקרים ומקלקל את הנתונים ב-IndexedDB. בעזרת Web Locks API, אפשר לוודא שרק כרטיסייה אחת תבצע את המשימה בזמן נתון.
אפליקציות AI מודרניות מריצות משימות ארוכות בדפדפן. סוכן AI מנהל דיאלוג מול Claude או OpenAI, מקבל תשובות ב-Streaming, ומעדכן את בסיס הנתונים המקומי בדפדפן.
מה קורה כשהמשתמש פותח את אותה אפליקציה בשלוש כרטיסיות שונות?
מתרחשת קטסטרופה שקטה. 3 כרטיסיות מריצות את אותו סוכן במקביל, שורפות טוקנים כפולים ב-API, ודורסות אחת לשנייה את התוצאות במגירה המקומית.
1. הבעיה: מרוצי חלוקת משאבים בכרטיסיות כפולות
משתמש טיפוסי ב-2026 פותח עשרות כרטיסיות במקביל. כשאפליקציית ה-AI שלכם מנסה לסנכרן מצב מקומי (State) או להזרים תשובות מ-LLM, כל כרטיסייה פועלת כאילו היא יחידה בעולם.
התוצאה ההרסנית:
- פניות כפולות ומיותרות ל-APIs יקרים.
- שגיאות כתיבה ל-IndexedDB בגלל גישה מקבילית.
- זליגת זיכרון ועומס מיותר על מעבד ה-GPU של המשתמש.
40%
מהקריאות ל-API באפליקציות AI מרובות כרטיסיות הן כפילויות שנוצרות עקב חוסר סנכרון
מקור: Web Dev Metrics, 2026
2. היכרות עם Web Locks API: הרמזור של הדפדפן
- הגדרה · Web Locks API
ממשק תכנות מובנה בדפדפן (navigator.locks) המאפשר לסקריפטים בכרטיסיות שונות של אותו Origin לתאם גישה למשאבים משותפים.
בעבר פיתחנו מעקפים מסורבלים עם LocalStorage וטיימרים כדי לנחש איזו כרטיסייה פעילה. כיום, הדפדפן מנהל את המנעולים האלו ברמת ה-Engine.
אם כרטיסייה א' מפעילה את הסוכן, היא מבקשת מנעול (Lock). כל עוד המנעול אצלה, כרטיסיות ב' ו-ג' יחכו בתור או יבצעו דילוג חכם.
3. אלגוריתם Leader Election: מי מנהל את סוכן ה-AI?
הדרך הנכונה לעבוד היא למנות כרטיסייה מובילה (Leader). רק היא מחזיקה בחיבור ה-WebSocket או מריצה את ה-Stream מול מודל ה-AI.
async function runAITask() {
await navigator.locks.request('ai_agent_leader', async (lock) => {
// הכרטיסייה הזו היא המנהלת
console.log('אני הלידר, מריץ את הסוכן...');
await startAgentStream();
});
}
זה עובד נפלא.
אם המשתמש סוגר את הכרטיסייה המובילה, הדפדפן מזהה את זה תוך מילישניות ומשחרר את המנעול. הכרטיסייה הבאה בתור מקבלת את הפיקוד מיד.
💡
Web Locks API פותר את בעיית ה-Crash: אם כרטיסייה קורסת, הדפדפן משחרר את המנעול אוטומטית. אין יותר מנעולים יתומים שתקועים בזיכרון.
4. מניעת כתיבה כפולה ל-IndexedDB ול-Local State
כאשר סוכן ה-AI מחזיר תשובה ארוכה, אתם רוצים לשמור אותה ב-IndexedDB כדי לא לאבד מידע. אם שתי כרטיסיות יכתבו את אותו ה-Chunk במקביל, הנתונים יתערבבו.
async function saveResponseChunk(chunk) {
await navigator.locks.request('db_writer', { mode: 'exclusive' }, async () => {
await updateIndexedDB(chunk);
});
}
אפשר להשתמש במנעולים מסוג shared לקריאה ו-exclusive לכתיבה, ממש כמו בבסיסי נתונים מתקדמים.
| סוג מנעול | התנהגות | תרחיש שימוש מומלץ |
|---|---|---|
exclusive | חוסם כל גישה אחרת | כתיבת תשובות מ-AI, הפעלת Prompt יחיד |
shared | מאפשר לקוראים נוספים | קריאת המצב הקיים מ-IndexedDB בכמה כרטיסיות |
5. שילוב AbortController וטיפול בביטולים
מה קורה אם המשתמש לוחץ "בטל" בכרטיסייה ב', בזמן שכרטיסייה א' היא זו שמריצה את המשימה בפועל?
משלבים את Web Locks API יחד עם BroadcastChannel ו-AbortController. ה-BroadcastChannel מעביר את אות הביטול בין הכרטיסיות, והכרטיסייה המובילה מפסיקה את קריאת ה-Fetch ומשחררת את המנעול.
שילוב שני הכלים האלה מייצר ארכיטקטורה יציבה לחלוטין שלא שורפת משאבים.
סיכום
פתחו 10 כרטיסיות באפליקציה שלכם. היא חייבת להישאר מהירה, שקטה וחסכונית.
💡
הפעלת סוכני AI מורכבים בדפדפן דורשת ניהול משאבים קפדני. Web Locks API הוא הדרך הפשוטה ביותר למנוע בזבוז כסף ב-API ופגיעה בחוויית המשתמש.
שאלות נפוצות
כל מה שעוד רצית לדעת
מה קורה אם הכרטיסייה שמחזיקה במנעול קורסת פתאום?
האם Web Locks API נתמך בכל הדפדפנים המודרניים?
מה ההבדל בין Web Locks API לבין BroadcastChannel?
כתב
אדיר בן יעקב · Adir Ben Yaakov
מקים JustBetterSite, סוכנות בניית אתרים ושיווק דיגיטלי בתל אביב. מתמחה ב-GEO (Generative Engine Optimization) — בנייה של אתרים שמופיעים בתשובות של ChatGPT, Claude, Perplexity ו-Gemini, לא רק בגוגל.
עוד עליי →להמשך הקריאה
מאמרים קשורים
Smart Websites
6 צעדים להרצת גרפיקה ו-AI חלק בלי לתקוע את האתר
מדריך מעשי להעברת חישובי AI ואנימציות מורכבות ל-OffscreenCanvas ו-Web Workers. שומרים על ה-Main Thread פנוי ועל 60fps נקי בגרפיקה מתקדמת.
המשךSmart Websites
טעינת מודלי AI בדפדפן בלי להרוג את הסוללה: מדריך ל-Network & Battery APIs
הרצת מודלי AI בדפדפן היא כלי עוצמתי ב-2026, אך ללא בקרת משאבים היא עלולה להקפיא את המכשיר. כך תשתמשו ב-Network Information API וב-Battery Status API כדי לטעון AI רק כשזה מתאים.
המשךSmart Websites
איך למנוע תקיעות במסך כשה-AI מזרים טקסט במהירות: ניהול Backpressure ב-UI
הזרמת תשובות AI במהירות גבוהה עלולה לחנוק את ה-DOM ולגרום לתקיעות זיכרון. למדו איך להשתמש ב-ReadableStream ו-requestAnimationFrame לבניית ממשק נטול קפיצות.
המשך