Smart Websites
איך להשתמש ב-scheduler.yield() כדי לשמור על INP מושלם באתרי AI
עיבוד מודלי AI בדפדפן תוקע את ה-Main Thread והורס את ה-INP. המדריך הפרקטי לשימוש ב-Scheduler API וב-scheduler.yield() לחלוקת משימות כבדות ללא קפיאות ממשק.
yield() כדי לשמור על INP מושלם באתרי AI
TL;DR
הרצת מודלי AI ועיבוד נתונים ישירות בדפדפן מייצרים משימות ארוכות (Long Tasks) התוקעות את הממשק. השימוש ב-scheduler.yield() מאפשר לפצל משימות כבדות, לטפל בקלטי משתמש בזמן אמת ולשמור על מדד INP ירוק ומהיר.
אני רואה יותר ויותר אתרים שמריצים מודלי AI ישירות בדפדפן ב-2026. מניתוח טקסט בלוקאלי ועד עיבוד וקטורים בזמן אמת, העבודה עברה אל הלקוח. אבל יש מחיר: הממשק נתקע.
כשהדפדפן מריץ בלוק קוד של 300 מילי-שניות, המשתמש מנסה ללחוץ על כפתור וכלום לא קורה. מדד ה-INP (Interaction to Next Paint) שלכם צונח באותו רגע.
- הגדרה · INP (Interaction to Next Paint)
מדד ביצועים של גוגל המודד את הזמן שחולף מרגע שהמשתמש ביצע אינטראקציה (לחיצה, הקלדה) ועד שהדפדפן עדכן את המסך בפועל.
הנה 6 הצעדים הפרקטיים ליישום scheduler.yield() כדי לפצל עיבודי AI כבדים ולשמור על אתר טס.
1. זיהוי נקודות החנק של ה-Main Thread
לפני שניגשים לקוד, צריך להבין איפה הבעיה. עיבוד של טוקנים, ג'נרייטור של טקסט, או חישוב דמיון קוסינוס בין וקטורים הם החשודים המיידיים.
כשרצים בלולאה צפופה, ה-Event Loop של הדפדפן נחסם. כל לחיצה על עכבר נכנסת לתור וממתינה לסיום הלולאה.
200ms
סף המקסימום של מדד INP לפני שהאתר מוגדר כאיטי על ידי גוגל
מקור: Chrome Web Vitals, 2026
אם יש לכם משימה שלוקחת 400 מילי-שניות, עברתם את הרף פי שניים. התשובה היא לא לבטל את החישוב, אלא לחתוך אותו למקעים קטנים.
2. להבין את הקסם של scheduler.
yield()
בעבר, מפתחים השתמשו ב-setTimeout(fn, 0) כדי לפצל משימות. הבעיה? setTimeout מעביר את המשימה לסוף התור, מה שגורם להשהיות מיותרות ולחוסר עקביות.
המנגנון של scheduler.yield() עובד אחרת. הוא אומר לדפדפן: "קח הפסקה קצרה, תבדוק אם המשתמש לחץ על משהו או אם יש רנדור דחוף, ומיד תחזור אליי".
async function processAITokens(tokens) {
for (let i = 0; i < tokens.length; i++) {
heavyCalculation(tokens[i]);
// הזרמת שליטה לדפדפן בכל 50 איטרציות
if (i % 50 === 0 && 'scheduler' in window && 'yield' in scheduler) {
await scheduler.yield();
}
}
}
הקוד קצר. ההשפעה על חווית המשתמש דרמטית.
3. חלוקת לולאות עיבוד טקסט ו-Embeddings
במקום לעבד את כל המערך במכה אחת, הגדירו נקודות יציאה (Yield points) בתוך הלולאות העיקריות.
אם אתם מעבדים מסמך ארוך כדי לייצר ממנו chunks עבור RAG מקומי, אל תריצו את ה-chunking במקשה אחת.
אל תבצעו yield בכל איטרציה יחידה. הפעולה עצמה בעלת תקורה קטנה. בצעו את ה-yield במנות (Chunks) של 10-16 מילי-שניות של עבודה רציפה.
זה שומר על זרימה רציפה מחד, ולא חוסם פריים יחיד מאידך.
4. עדכון רכיבי UI בזמן העיבוד
אחד היתרונות של scheduler.yield() הוא הנראות. כשה-Main Thread משתחרר, הדפדפן יכול לרנדר שינויים ב-DOM.
זה מאפשר לכם להציג פרוגרס-בר אמיתי שמתעדכן באופן חלק, ולא כזה שקופא ב-0% ופתאום קופץ ל-100%.
- המשתמש רואה שהמערכת עובדת
- הממשק מגיב ללחיצות ביטול (Cancel)
- מדד ה-INP נשאר מתחת ל-50 מילי-שניות
התחושה של האתר הופכת מאפליקציה כבדה לאפליקציית נייטיב מהירה.
5. מימוש Fallback דפדפנים בטוח
למרות התמיכה הרחבה ב-2026, תמיד כדאי לוודא שהקוד לא נשבר בדפדפנים ישנים או בסביבות קצה.
כך נראה פוליפיל פשוט ונקי:
async function safeYield() {
if ('scheduler' in window && 'yield' in scheduler) {
await scheduler.yield();
} else {
await new Promise(resolve => setTimeout(resolve, 0));
}
}
משתמשים בפונקציה הזו בתוך ה-Async Loops שלכם, והקוד מוגן לחלוטין.
6. מדידה ובקרה ב-Chrome DevTools
אל תנחשו — תמדדו. פתחו את לשונית Performance ב-DevTools והקליטו את פעולת ה-AI.
חפשו פספסים אדומים מעל לשורת ה-Main Thread. אלה ה-Long Tasks. כשהטמעה של scheduler.yield() עובדת נכון, הפסים האדומים הארוכים נעלמים ובמקומם מופיע גוש ירוק של משימות קצרות (Short Tasks).
| מדד | לפני השימוש | אחרי השימוש |
|---|---|---|
| Long Task Max Duration | 450ms | 14ms |
| INP Score | 380ms (Poor) | 28ms (Good) |
| תגובתיות כפתורים | קפוא | מיידית |
💡
ביצועים הם לא רק גודל הקובץ שלכם — הם בעיקר הזמן שה-Main Thread פנוי להקשיב למשתמש.
סיכום
שילוב מודלי AI בדפדפן מעניק פרטיות ומהירות, אך מציב אתגר ביצועים קשה. ה-Scheduler API ומתודת scheduler.yield() הם הכלים המרכזיים שלכם לשמירה על מדדי Core Web Vitals מעולים. חלוקה נכונה של המשימות תבטיח שהאתר שלכם יישאר מהיר, נגיש ומדורג גבוה.
שאלות נפוצות
כל מה שעוד רצית לדעת
מה ההבדל בין scheduler.yield() לבין setTimeout(..., 0)?
האם Web Workers לא פותרים את הבעיה הזו לחלוטין?
מה קורה בדפדפנים שעדיין לא תומכים ב-Scheduler API?
כתב
אדיר בן יעקב · Adir Ben Yaakov
מקים JustBetterSite, סוכנות בניית אתרים ושיווק דיגיטלי בתל אביב. מתמחה ב-GEO (Generative Engine Optimization) — בנייה של אתרים שמופיעים בתשובות של ChatGPT, Claude, Perplexity ו-Gemini, לא רק בגוגל.
עוד עליי →להמשך הקריאה
מאמרים קשורים
Smart Websites
7 צעדים לדחיסת זיכרון AI בדפדפן עם Compression Streams API
איך לחסוך עד 80% בשטח האחסון של IndexedDB בשימוש ב-Compression Streams API. מדריך מעשי לניהול וקטורים והיסטוריית שיחות AI בדפדפן ב-2026.
המשךSmart Websites
WebNN API ב-2026: מודלי AI בדפדפן הלקוח ללא עלויות שרת
איך להשתמש ב-WebNN API כדי להריץ מודלי בינה מלאכותית על ה-GPU וה-NPU של הלקוח בזמן אמת, לקבל תגובה מיידית ולחסוך בעלויות ענן.
המשךSmart Websites
6 צעדים להרצת גרפיקה ו-AI חלק בלי לתקוע את האתר
מדריך מעשי להעברת חישובי AI ואנימציות מורכבות ל-OffscreenCanvas ו-Web Workers. שומרים על ה-Main Thread פנוי ועל 60fps נקי בגרפיקה מתקדמת.
המשך