פורום הסקופים של רוטר – יכול להיטען מהר יותר?

עריכה 03/06/2013: שנה אחרי שכתבתי את הפוסט, חל שיפור עצום במערכות של רוטר והיום האתר עובד מהר יותר ונכון להיום, הפוסט הזה לא רלוונטי לאתר רוטר. 

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

הפורום משתמש בסקריפט DC Forum, בגירסת ה-PERL (יש גם גירסת PHP), זה סקריפט מיושן (אם כי בעבר היתרון שלו על פורמים אחרים היה שאת הפוסטים עצמם הסקריפט שומר כ-HTML ללא קריאות ל-SQL וכו'), עם לא מעט באגים (פוסטים מאוד מבוקשים עם הרבה פעולות כתיבה פשוט קורסים ונעלמים), למרות זאת, המפעיל של האתר, לא ממהר להחליף את המערכת/עיצוב ומסביר כי: "מה שעובד לא מחליפים."

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

עברתי על האתר כדי לנסות ולבדוק איפה אפשר לצמצם את העומס על השרת בלי להשקיע מאות שעות עבודה של מתכנתים:

Time To First Byte:

ה-TTFB של עמוד הסקופים לאורחים עומד על 900 מילישנייה, הזמן הזה מורכב מ:

  • Apache מנתח את הבקשה.
  • מפעיל פרוסס perl.
  • הפרוסס מעבד את הקובץ ע"פ הפרמטרים שהתקבלו ומעביר את הפלט ל-Apache.
  • Apache מעביר את הפלט לגולש.

אני מניח שעיקר הזמן מושקע בשליפת הפוסטים, אין טעם לבצע את הפעולה כל פעם מחדש (במיוחד כשיש רגעים שיש 800 בקשות בשנייה), אפשר לייצא את פלט הפוסטים לקובץ סטטי ולעדכנו כל 2 שניות למשתמשים רשומים וליצור קובץ נוסף המכיל את כל העמוד לאורחים, ולעדכנו כל 3 שניות.

KeepAlive:

כתבתי על הפונקציה הזו בעבר, בקצרה, הפונקציה מאפשרת להשתמש באותו החיבור בין הגולש לשרת כדי להוריד קבצים נוספים, ברוטר, הפונקציה הזו מבוטלת. לכן, כל פעם שגולש מבקש את העמוד הראשי הוא יוצר 51 חיבורים לשרת, 51 פרוססים של Apache. במידה ורוטר יפעילו KeepAlive בשרתים שלהם, גולש ב-IE8 יפתח 6 חיבורים בלבד להורדת האלמנטים. 45 פרוססים פחות.

Gzip (דחיסת HTTP):

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

המשקל של פורום הסקופים עומד בממוצע על 80KB, במידה וה-Gzip יופעל, התעבורה בין השרת לגולש תעמוד על 12KB, חסכון עצום של 68KB.

הנה השוואה בין זמן טעינת הפורום עם אופטמזציה שלי למול הפורום:

מקרא:

כתום – יצירת חיבור.

ירוק – TTFB.

כחול – זמן הורדה.

הורדת הקובץ עם דחיסה: 80 מילישנייה.

הורדת הקובץ ללא דחיסה: 500 מילישנייה.

סה"כ שיפור: 420 מילישנייה בממוצע.

Cookieless domain:

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

Cache-Control:

כתבתי על Cache-Control בעבר, הפונקציה הזו מאפשרת לשרת להודיע לדפדפן בעת בקשת קובץ, לשמור את הקובץ במחשב ולא להוריד אותו שוב מהשרת למשך X שניות (יום/שבוע/חודש/שנה – תלוי מתי הקובץ מתחדש).

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

השוואה בין רוטר לאופטמזציה שלי:

הורדתי את פורום הסקופים לשרת שלי, וביצעתי את כל השינויים שכתבתי, הנה השוואה בין טעינת העמוד מישראל עם IE8 ומטמון ריק של פורום הסקופים והשרת שלי:

*** בעת ביצוע ההשוואה בוטלו כל הפירסומות.

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

עריכה: כתבתי פוסט נוסף המציג את השימוש בפונקצית Flush ב-PHP כדי להאיץ את האתר, אני ממליץ לקרוא וליישם.

פורסם בקטגוריה כללי. אפשר להגיע לכאן עם קישור ישיר.

5 תגובות על פורום הסקופים של רוטר – יכול להיטען מהר יותר?

  1. מאת גיא‏:

    מגניב ,
    עם איזה תוכנה בדקת את זה?

  2. מאת מיכאל‏:

    אני חושב שעם בנוסף הם יעברו לNginx במקום אפאצ'י, בכלל הפורומים שלהם יטוסו…

    • מאת Avi Keinan‏:

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

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

      **** שימו לב ש-Rotter עברו ל-nginx והפעילו KeepAlive ****

  3. פינגבאק: כמה טראפיק מקבלים מלינק ברוטר? | אבי קינן – מחשבים וכו'

להגיב על גיא לבטל

האימייל לא יוצג באתר. שדות החובה מסומנים *