דחיסת עמודים בשרתי לינוקס

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

ב PHP אחד הפיתרונות מגיע בדמותו של אובייקט הבאפר הנוצר ע"י פקודת ה ob_start. את אובייקט הבאפר אפשר לדחוס כ Gzip בעזרת הפקודה ob_gzhandler.

וככה זה עובד:

 if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) 
ob_start("ob_gzhandler"); 
else ob_start();

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

לדרג את הפוסט
0

Comments

14 תגובות על “דחיסת עמודים בשרתי לינוקס”

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

    1. כמובן, אבל חלק גדול מהתוספים נוהג לדחוף ג'אנק רב אל תוך העמוד הנוצר, כמובן שהגדרה של זמן תפוגה ארוך בקובץ htaccess יכול לעזור גם הוא.

  2. אין לשיפור הזה חסרונות?
    תמיד מומלץ להשתמש בו?

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

  3. רעיון רע מאוד באופן כללי ובמיוחד לשרתים שיתופיים

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

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

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

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

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

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

    במקרה מתנהל עכשיו דיון בקבוצת הוורדפרס שנוגע קצת בנושא
    http://groups.google.com/group/wp-hackers/browse_thread/thread/3679e46375575588

    1. זה בדיוק מה שכתבתי בתשובה לחתול – שיש לזה כמובן מחיר.
      באשר לנושא הדחיסה על אפאצ'י – אפשר להגדיר דחיסת gzip גם דרך קובץ htaccess, ובכל לחסוך את כל הפוסט הזה.

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

      1. התגובה הזו פשוט עמדה לי בפה מאתמול, עוד לפני התגובה של חתול, ובבוקר הייתי חייב לפרוק 🙂

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

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

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

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

    1. עוד כמה כוסות קפה ואני אעדכן את הפונקציה כך שתזמין אותך לקנות לי בירה בלילה או קפה בבוקר.

  5. סתם שאלה: אני היחיד שמוצא ששימוש ב-wp-cache עושה את העבודה בצורה מעולה מבלי לחנוק מעבדים, זכרון וכו'? אני מריץ כאן בבית 3 בלוגים, ה-UPLOAD לא משהו על ADSL, וזה עובד מצוין בלי לשנות שורה אחת בשום מקום.

  6. והאם אני היחיד שלא מרגיש בשום יתרון ב WP-CACHE?

  7. לדעתי שימוש בקובץ htaccess עושה את שלו, יש מגוון שיטות כל אחת והיתרונות/חסרונות שלה.


    # Caching for Images

    ExpiresActive on
    ExpiresByType image/jpg "access 3 months"
    ExpiresByType image/gif "access 3 months"
    ExpiresByType image/png "access 3 months"
    ExpiresByType image/x-icon "access 3 months"

    # Caching for Images

    # GZIP Compression

    mod_gzip_on Yes
    mod_gzip_dechunk Yes
    mod_gzip_item_include file \.(html?|txt|css|js|php)$
    mod_gzip_item_include handler ^cgi-script$
    mod_gzip_item_include mime ^text/.*
    mod_gzip_item_include mime ^application/x-javascript.*
    mod_gzip_item_exclude mime ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

    # GZIP Compression

    # BEGIN Deflate

    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    SetOutputFilter DEFLATE

    # END Deflate

כתיבת תגובה

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