perf(citation-view): cache מבוסס-טביעה — 24.6 שנ׳ לטעינה חוזרת → 0.01 שנ׳ #464
Reference in New Issue
Block a user
Delete Branch "worktree-citation-view-cache"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
הרכבת התצוגה עולה 20+ שניות, והתוצאה משתנה רק כשמשתנים הקלטים.
למה טביעה ולא TTL: יו״ר שמאמת תקדים חייב לראות זאת בטעינה הבאה, לא כשיפוג טיימר.
_inputs_fingerprint= שאילתה זולה אחת על טיעונים · שיוכי-פסיקה · גודל-קורפוס. הנכונות אינה תלויה בכך שמישהו יזכור לבטל (G1) — הבדיקה במקור-האמת.מדידה (8124-09-24):
cached=falsecached=true— פי 2,074cached=falseמנעול פר-תיק נגד היצף — שש טעינות מקבילות = הרכבה אחת. זה התרחיש שהפיל את המערכת. תצוגה חלקית נשמרת ל-90 שנ׳ בלבד כדי שההצעות החסרות לא ייתקעו לנצח.
invariants: G1 · §6
6 טסטים חדשים; 537 עוברים; 3 שערים ירוקים.
הרכבת תצוגת אימות-הפסיקה עולה 20+ שניות של embeds וחיפושים וקטוריים, והתוצאה משתנה רק כשמשתנים הקלטים שלה. עד עכשיו כל פתיחת-דף שילמה את המחיר המלא מחדש, וכל רענון תוך-כדי-טעינה הוסיף הרצה מקבילה — כך העומס המקורי התגלגל ל-deadlocks ב-Postgres. למה טביעה ולא TTL: יו"ר שמאמת תקדים חייב לראות זאת בטעינה **הבאה**, לא כשיפוג טיימר. `_inputs_fingerprint` הוא שאילתה אחת זולה שמסכמת בדיוק את מה שהתצוגה נגזרת ממנו — טיעונים · שיוכי-פסיקה · גודל-הקורפוס. השתנה משהו → הטביעה זזה → נבנה מחדש. **הנכונות אינה תלויה בכך שמישהו יזכור לבטל** (G1): הבדיקה יושבת במקור-האמת ולא בזיכרון של כל כותב. `invalidate()` קיים לנוחות, לא לתקינות. מה שונה - cache פר-תיק, מפתח = טביעת-הקלטים. תצוגה שלמה אינה פגה בטיימר. - **מנעול פר-תיק נגד היצף** — שש טעינות מקבילות מריצות הרכבה אחת. זה בדיוק התרחיש שהפיל את המערכת. - תצוגה **חלקית** (תקציב-האחזור נגמר) נשמרת ל-90 שנ' בלבד: מספיק כדי לעצור סופת-רענונים, לא מספיק כדי שההצעות החסרות ייתקעו לנצח. - `cached: true/false` בתשובה, ו-`use_cache=False` למי שצריך רענון כפוי. מדידה מול הקורפוס החי (8124-09-24): טעינה קרה ........ 24.6 שנ' cached=false טעינה חוזרת ...... 0.01 שנ' cached=true ← פי 2,074 5 מקבילות ........ 0.02 שנ' כולן מה-cache אחרי invalidate .. 24.8 שנ' cached=false invariants: G1 (השער במקור-האמת, לא בכל כותב) · §6 (חלקי מסומן ופג, לא נשמר כשלם) טסטים: 6 חדשים (tests/test_citation_view_cache.py) — כולל היצף-מקבילי, פקיעת תצוגה חלקית, וביטול-אוטומטי בלי קריאה מפורשת ל-invalidate. 537 עוברים.