וובמאסטר - תיכנות ובניית אתרים

מדריך CSHTML - עבודה עם מטמון (Cache) לשיפור הביצועים של האתר שלך

ליאור זמיר ,‏ ג'ון ברייס הדרכה‏ ‏/‏ 6 פברואר, 2011
F+
F-

בכל פעם שמישהו מבקש דף מהאתר שלך, שרת ה-Web צריך לבצע עבודה מסוימת על-מנת לשרת את הבקשה. ייתכן שעבור חלק מהדפים שלך, השרת יאלץ לבצע משימות שבאופן יחסי לוקחות זמן רב (כמו שליפת נתונים מבסיס הנתונים).

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

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

באופן כללי, מומלץ להכניס ל-Cache מידע שלא משתנה באופן תדיר. כאשר מכניסים מידע לתוך ה-Cache , הוא נשמר בזיכרון על גבי שרת ה- Web. ניתן לציין את כמות הזמן שמידע זה ישאר ב- Cache מטווח של שניות עד טווח של ימים. כאשר "פג התוקף" של תקופת השמירה המצוינת ל-Cache, המידע מוסר בצורה אוטומטית מהזיכרון.

הערה : מופעים שונים של נתונים בתוך ה-Cache יכולים להיות מוסרים מסיבות אחרות מאשר "פקיעת התוקף" של הזמן המוקצה להם. למשל, שרת ה-Web יכול באופן זמני לחוות מחסור בזיכרון מסיבות שונות, ועל מנת לרוץ באופן תקין, הוא יכול להסיר מופעים מה-Cache על מנת להמשיך לעבוד באופן תקין.

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

שפת CSHTML כוללת עוזר (helper) שנקרא WebCache, שהופך את הוספת יכולת ה- Cache לאתר שלנו והוספת מידע ל-Cache, לפעולות פשוטות וקלות. בתהליך זה ניצור דף אשר מבצע שמירה של הזמן הנוכחי לזיכרון ה-Cache. זוהי לא דוגמא מהעולם האמיתי, כי כמובן הזמן הנוכחי הוא משהו שמשתנה לעיתים תכופות וכמובן קל מאוד לחישוב, אבל זוהי דרך טובה להדגים איך עובד Cache הלכה למעשה.

1. הוסף דף לאתר חדש וקרא לו WebCache.cshtml.

2. הוסף את הקוד הבא לדף:

@{
  var cacheItemKey = "Time";
  var cacheHit = true;
  var time = WebCache.Get(cacheItemKey);

  if (time == null)
  {
    cacheHit = false;
  }

  if (cacheHit == false)
  {
    time = @DateTime.Now;
    WebCache.Set(cacheItemKey, time, 1, false);
  }
}
<!DOCTYPE html
>
<
html
>
<
head>
  <title>WebCache Helper Sample</title
>
</
head
>
<
body>
  <div>
    @if (cacheHit)
    {
      @:Found the time data in the cache.
    }
    else
    {
      @:Did not find the time data in the cache.
    }
  </div>
  <div>
    This page was cached at @time.
  </div
>
</
body
>
</
html
>

כאשר אנו שומרים את המידע ל-Cache, אנו משתמשים בשם שהוא יחודי עבור האתר שלנו. במקרה שלנו, אנו משתמשים בשם Time. זהו ה – cachItemKey המופיע בדוגמת הקוד.

בקוד אנו קודם קוראים ליחידת ה-Cache הנקראת - Time . אם חוזר ערך (כלומר, אם יחידת ה-Cache אינה מחזירה ערך ריק – null) אז אנו פשוט מכניסים את הערך של יחידת ה-Cache לתוך המשתנה time.

בכל מקרה, אם יחידת ה-Cache אינה קיימת (כאמור, מחזירה null), אז אנו מכניסים את ערך הזמן הנוכחי לתוך המשתנה time, מוסיפים ערך זה לתוך ה-Cache ומכוונים את ערך "פקיעת התוקף" למשך דקה אחת. אם לא מתבצעת בקשה נוספת לדף במשך דקה, יחידת ה-Cache תמחק מהזיכרון. (ערך ברירת המחדל עבור יחידה בזכרון ה-Cache הינו 20 דקות).

הקוד מדגים את התבנית הכללית שבה נשתמש כאשר אנו משתמשים ב-Cache. לפני שלוקחים ערך כלשהו מה-Cache, צריך תמיד לבדוק אם הפונקציה WebCache.Get החזירה null. זכור כי ייתכן שיחידת ה-Cache הוסרה מכיוון שעבר פרק הזמן של "פקיעת התוקף" שלה, או שהיא הוסרה מסיבות אחרות, אז כמובן שאף פעם לא מובטח שהערך עדיין נמצא ב-Cache.

3. הצג את הדף WebCache.cshtml בדפדפן. בפעם הראשונה שנבקש את הדף, ערך הזמן המוצג אינו מגיע מה-Cache, אך הקוד מתווסף ל- Cache.

cache1

4. רענן את הדף WebCache.cshtml בדפדפן. הפעם, המידע המוצג לגבי הזמן, מגיע מה-Cache. שים לב שהזמן אכן לא השתנה מהפעם האחרונה שהצגת את הדף.

cache2

5. המתן דקה אחת על מנת לאפשר ליחידת ה-Cache להתרוקן, ואז רענן שוב את הדף. הדף שוב מכיל את המידע המעודכן לגבי הזמן ואינו מגיע מה-Cache, אך כמובן המידע המעודכן עובר גם לזיכרון ה-Cache כמו שראינו בפעולה מספר 3.

ליאור זמיר, ג'ון ברייס הדרכה

כיום אני ה- Webmaster של תוכנית החדשנות של HPE Software.
לפני כן, הייתי מנהל תחום Webmaster ומרצה בכיר בג'ון-ברייס (במשך 9 שנים) בקורסים לפיתוח ותיכנות באמצעות Microsoft .NET, מולטימדיה, בניית אתרי אינטרנט ואינטראנט. פיתוח הדרכה ומתן ייעוץ טכנולוגי.
תגיות: ASP.NET‏  /  CSHTML‏  

תגובות בפייסבוק

תגובות למאמר



עוד במדריך

תגיות פופולאריות

X
הצטרף לעמוד שלנו בפייסבוק להישאר מעודכן!
וובמאסטר © כל הזכויות שמורות