צודקים! רק בזכות השאלות שלכם בדקתי וקלטתי שאני טוען חצי ג'יגה לזכרון, וזה קצת מיותר..
וגם לוקח הרבה זמן עד שהכל נטען, דבר שפוגע בחוויות המשתמש :shock:
אתן קצת פרטים ורקע:
אני משתמש בVS 2015 Comunity Update 2 , יש לי את הDiagnostic (הגראפים האלה שרצים בצד ימין למעלה?!), רק אין לי מושג איך משתמשים בו :?
לכל ספר אני בונה אינדקס שמכיל Dictionary של כל המילים שמופיעים בספר, וכל מילה - מכילה ליסט של כל המופעים שלה באותו ספר. (על כל מילה אני שומר הרבה מידע על המיקום שלה (כגון באיזה פרק, פסקה, תת-פסקה - היא נמצאת. מה מיקום המילה מתחילת הספר, ומתחילת הפסקה, מה מיקום התו הראשון במילה (שוב גם כאן - מתחילת הספר, ומתחילת הפסקה). יכול להיות שבאמת זה מיותר ואין צורך בכל הדברים הללו, ובטח זה יוריד לי את הנפח של האינדקס..
מה שעשיתי עד היום היה לטעון את כל קבצי הJSON של האינדקסים לתוך מערך של סטרינגים, אח"כ להמיר את כולם לאובייקטים של האינדקס, כך שיהיו זמינים לחיפוש מהיר. דבר שכמובן לקח הרבה זמן עד שהחיפוש היה מוכן לשימוש (במחשב מהיר כשלי עם כונן SSD ומעבד I5 לקח לו כדקה, במחשבים פשוטים יותר - יותר מ2 דקות..)
עכשיו שיניתי את זה, שבתחילה יטענו קבצי הJSON לתוך מערך הסטרינגים (במחשב שלי כ3 שניות), וכאשר המשתמש בוחר ספר לחיפוש - הוא ממיר את הסטרינג הנדרש לאובייקט של אינדקס, ומחפש בו. כל זמן שהוא לא בחר בספר אחר - האינדקס הנ"ל ממשיך לחיות, וכאשר הוא בוחר באינדקס אחר - האינדקס הנבחר נטען, והשני נדרס. (קודם אני מציב במשתנה NULL כדי לשחרר אותו, ואח"כ טוען לתוכו את האינדקס מהסטרינג).
אכן זה משפר פלאים את מהירות טעינת התכנה, ואת המוכנות של ממשק החיפוש.
עכשיו שיניתי שהוא לא טוען כלום בהתחלה, ורק כשהמשתמש בוחר לחפש - הוא טוען את הJSON הספציפי לסטרינג וממיר אותו לאובייקט, ובא לציון גואל.
פורסם במקור בפורום CODE613 ב09/06/2016 14:59 (+03:00)