שיפור ביצועי שרת ו-Nginx באמצעות gzip_static

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

השרת מאחורי FW, עם 64Gb זכרון ראם, כל התוכן יושב על RamDisk.

אצל חלק מהלקוחות לא כל המערכות מוגדרות לייעילות מרבית, אצלי כבררת מחדל:

  • קובץ CSS/JS שאינו דחוס (מכיל רווחים, הערות וכו') עובר דחיסה אוטומטית.
  • יש  דחיסת Gzip לכל קבצי txt. .js .css ב-HTTP/1.1 (דפדפנים תומכים).
  • דפדפנים ישנים המשתמשים שלא תומכים ב-Gzip מקבלים את התוכן ללא Gzip.
  • Expire header מוגדר כהלכה.
  • KeepAlive פועל.
  • ה-TTFB נמוך מאוד.

בנוסף, שימוש ב-IP של השרת מאשר בכתובת האתר מאפשר טעינה מהירה יותר מאחר והדפדפן פותח עוד 2-8 חיבורים והאייפי הוא "חסר עוגיה".

ערכתי מס' בדיקות ומצאתי שאפשר לחסוך זמן מעבד ולשפר את ה-TTFB עוד יותר (ב-HTTP/1.1), באמצעות פונקצית gzip_static ב-nginx.

הפונקציה הזו מאפשרת לך ליצור מראש שני קבצים:

  • file.txt – קובץ המקור, ללא דחיסה.
  • file.txt.gz – הקובץ לאחר הדחיסה.
הערה: חותמת הזמן (timestamp) של שני הקבצים חייבים להיות תואמים.

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

מספר טיפים:

1. שימוש ב-gzip_static ללא קבצי gz הוא בזבזני, מאחר וכל בקשת קובץ Nginx מחפש את קובץ ה-gz, ורק במידה והוא לא קיים הוא ממשיך לקובץ המקור, ניתן לחסוך המון I/O בביטול האפשרות הזאת.

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

location ~* ^.+.(jpg|png|bmp|jpeg|tif)$ {
# Rest of configuration
gzip_static off;

}

3. במידה ו-Nginx משרת המון קבצים שונים, נפעיל את האפשרות רק עבור קבצי טקסט:

location ~* ^.+.(js|css|txt)$ {
# Rest of configuration
gzip_static on;
}

אבי קינן.

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

כתיבת תגובה

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