שלח תשובה

זירת השאלות

515
צפיות
4
תשובות

בעיית יעילות קשה – מה עושים ?

,‏ 11 בספטמבר, 2005

(שפה-JS, דיבי-ACCESS, צד-לקוח)

שלום לכולם. נתקלתי בבעיה מעצבנת למדיי..

אני מתכנת אתר ובו פריטי מידע אדריכליים (גורדי שחקים, מבנים, כיכרות, פרוייקטים וכו') – להלן "פריטי מידע". לכל פריט מידע משוייכים תמונות, מצב בנייה, סגנון אדריכלי, שימוש (משרדים, מגורים וכו'), סעיפי טקסט וכו'. לכל דבר שציינתי פה יש טבלה בדיבי (טבלת פריטי מידע, טבלת תמונות, טבלת סעיפי טקסט וכו').

השיטה שהכי התאימה לעבוד עם האתר היא אובייקטים (בצד השרת והלקוח), כאשר כל פעם ע'פ מאפייני העמוד שולפים רשומות מהדיבי ע'פ שאילתה כלשהי (לדוגמה "כל פריטי המידע שעוד לא הושלמו", "כל המגדלים", פריט מידע ספציפי וכו'), ואתם יוצרים את האובייקטים.
בגלל שכל רשומה (שורה) שחוזרת מהשאילתה היא "ערבוב" של כל הטבלאות (יוצא משהו כמו 50-60 ערכים בשורה), יוצא שכל פעם שאני עובר על שורה אני צריך לעשות שני דברים:
א) לבדוק האם השורה יוצרת אובייקט חדש (פריט מידע/תמונה וכו') ואם כן ליצור אותו.
ב) לבדוק האם השורה יוצרת קשר חדש בין אובייקטים (תמונה משוייכת לפריט מידע וכו') ואם כן ליצור אותו.

לא הייתה לי בעיה עם איך שזה עבד עד עכשיו אולם עכשיו, עם גדילת הדיבי (להערכתי משהו סביב 10000 רשומות) אני זוכה להודעת שגיאה נוראית (כרגע רק בצד הלקוח), וראו התמונה. הצלחתי למצוא שמה שגורם לסקריפט להיות כ'כ איטי אלה בדיוק שתי הפוקנציות שעושות את סעיפים א' וב'. מהמעבר שלי (הלא מומחה בנושאי יעילות) עליהן לא מצאתי דברים שיכולים להאיט. כמו כן הדבר הראשון שניסיתי היה למחוק את כל האובייקטים והמערך ששומר את הרשומות, עם סיום טעינת העמוד, וזה לא עזר.
השאלה היא : האם הסקריפט נידון לכישלון והשיטה בה אני עובד לא טובה??
או האם יש דרך לפתור את הדבר המפחיד הזה?

תודה מראש, דניאל.

תגיות:

4 תשובות

  1. BuildHome הגיב:

    איפה התמונה?
    לא צירפת את התמונה…

    זה יותר קשור לצד שרת – מועבר.

  2. adventureboy הגיב:

    אז ככה
    עם בסיס הנתונים גדול מידי רצוי שתשקול מעבר לבסיס נתונים msSQL או mySQL – לפי הצרכים שלך.

    שנית, הודעת השגיאה שאתה מקבל היא מפני שקוד ה JS שלך גדול מידי וגורם לעומס על זיכרון של המחשב.
    אני מציע לך לבנות את כל הפונקציות שאתה מתאר בצד שרת (כולל החלוקה לעמודים) ושהלקוח יקבל רק את תוצאת ה HTML שתציג את העמוד.

    גם אם תוכל להסביר למה כל הרשומות שלך נכנסות לתוך שורה אחת?

  3. זהר פלד הגיב:

    שאלוהים יעזור לכם…
    כמו שזה נראה לי, יש כאן טעות עצומה בתכנון.
    כל הכיון של אובייקטים מורכבים בצד השרת, שהופכים להיות אובייקטים מורכבים לא פחות בצד הלקוח – הוא פשוט לא דרך העבודה הנכונה.

    מה שאת צריכה לעשות הוא לשלוף מה DB את המינימום ההכרחי של הנתונים, ולבנות מהם HTML בצד השרת.
    את כל מה שהדף שאליו קישרת מציג ניתן לבנות בצורה הרבה יותר פשוטה, עם קצת html וקצת asp.

    אין שום סיבה לערב כאן סקריפטים ארוכים ומסובכים בצד השרת או בצד הלקוח.

שלח תשובה