
אופטימיזציה של רינדור מסמכים גדולים ב-ASP.NET Core
המהירות היא תכונה
כאשר משתמש לוחץ על "הצג מסמך", הוא מצפה שהטעינה תתבצע מיד. בין אם מדובר במזכר של 3 עמודים או בתקציר משפטי של 5,000 עמודים, המתנה אינה אפשרות. Doconut תוכנן למהירות, אך עבור עומסים ברמת ארגון, אופטימיזציה של היישום שלכם היא המפתח.
1. אסטרטגיות קאשינג חכמות
רינדור חוזר של אותה העמוד הוא בזבוז של מחזורי CPU. ממשק הקאשינג המובנה של Doconut מאפשר לאחסן תמונות של עמודים מרונדרים ביעילות.
- קאשינג בדיסק: מצוין לתצורות של שרת יחיד עם אחסון NVMe מהיר. העמודים המרונדרים נשמרים ב-
App_Dataומוגשים באופן סטטי בבקשות הבאות. - קאשינג מבוזר (Redis): הכרחי עבור חוות מאוזנות עומס. אם שרת A מרונדר את דף 5, שרת B צריך להיות מסוגל לספק אותו ללא רינדור מחדש. Doconut תומך במימושים מותאמים של
ICacheלהתחברות ישירה ל-Redis או Memcached.
2. טעינה עצלה & וירטואליזציה
לעולם אל תשלח את כל המסמך בבת אחת. Doconut משתמש בגישה של גלילה וירטואלית.
- רק העמודים הגלויים (בנוסף למאגר קטן) מתבקשים מהשרת.
- כאשר המשתמש גולל, עמודים חדשים מתקבלים לפי דרישה. זה מבטיח שפתיחת קובץ PDF של 100 מגהבייט לוקחת בערך את אותו זמן טעינה ראשוני כמו קובץ של 1 מגהבייט.
3. קונקורך & ריבוי תהליכים
ב‑ASP.NET Core, ניהול משאבים הוא קריטי.
- עיבוד מקבילי: Doconut יכול לנצל CPU מרובי ליבות כדי לרנדר מראש דפים סמוכים בזמן שהמשתמש קורא את הדף הנוכחי.
- ניהול אסימונים: סגור מטפלים למסמכים (
objDoc.Close()) מיידית כשאינם נדרשים עוד (או השתמש בבלוקיםusing) כדי לשמור על טביעת זיכרון נמוכה.
4. שיפורים ייחודיים לפורמט
- PDFs: וודא ש"Fast Web View" (לינריזציה) אינו נדרש באופן מחייב ל‑Doconut (מאחר שאנחנו מרנדרים בשרת), אך מבנים פנימיים מותאמים יכולים לעזור.
- תמונות: עבור TIFFs/JPEGs ענקיים, הפעלת רינדור מרושת של Doconut יכולה למנוע חריגות OutOfMemory בכך שהיא מעבדת את התמונה בחלקים.
הגדלת קנה מידה
ליישומים שמשרתים אלפי משתמשים במקביל, Doconut הוא מוכן ללא מצב. על‑ידי הפשטת האחסון (S3/Azure Blob) והקאשינג (Redis), ניתן להגדיל את מופעי המחשוב שלך בצורה אופקית (Kubernetes/App Service Plan) כדי להתמודד עם כל עליית תנועה.
ספק צפייה במסמכים מהירה כמו ברק עם יישום מותאם של Doconut.