התייעלות מערכת וורדפרס – מקטינים מהירות

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

מבוא:

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

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

בוא נתחיל

דחיסת Gzip

מהלך זה מאפשר לנו לדחוס את כל הקבצים הטקסטואליים (HTML, CSS, XML וכו..) בצורה דרסטית. כאן תוכלו לבדוק את התוצאה. לי זה חסך 80.54%.
פותחים את קובץ index.php של הוורדפרס ולא של התבנית ומכניסים את השורה הבאה לתחילת הקוד (לאחר ?>).

ob_start('ob_gzhandler');

חשוב מאוד: שרת חייב לתמוך בzlib על בסיס PHP.

שימוש ב Caching של דפדפנים

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

פותחים את הקובץ .htaccess ומזינים לשם את הערכים הבאים:

# BEGIN Expire headers

ExpiresActive On
ExpiresDefault "access plus 5 seconds"
ExpiresByType image/x-icon "access plus 1296000 seconds"
ExpiresByType image/jpeg "access plus 1296000 seconds"
ExpiresByType image/png "access plus 1296000 seconds"
ExpiresByType image/gif "access plus 1296000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 1296000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 532000 seconds"
ExpiresByType application/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"

# END Expire headers

זמן הינו בשניות וניתן לשנות לערך רצוי (אצלי הוא 1296000 שניות שזה 15 ימים).
*חשוב מאוד לזכור שקוד זה לא ניתן להטמיע באתר שנמצא בשלבי פיתוח שלו או בשלבי התאמות. אחרת לא ניתן לראות שינויים.

הורדת גרסאות סקריפטים מתוך הקוד

שימוש בCaching של דפדפן נעשה אך ורק לסקריפטים שמסתיימים בסוג הקובץ (.js, .css, וכו…). סיומות שכוללות בתוכם את גרסאות הקובץ (.css?ver=x.x.x או .js?ver=x.x.x ) לא נכללות.
לכן ישנו צורך להוריד את מספר גרסה. עושים זאת בעזרת פונקציה לקובץ function.php.

function _remove_script_version($src){
$parts = explode('?', $src);
return $parts[0];
}
add_filter('script_loader_src', '_remove_script_version', 15, 1);
add_filter('style_loader_src', '_remove_script_version', 15, 1);

פונקציה מסירה את מספר גרסה מתוך הקוד.

הסתרת פרטים של וורדפרס מתוך הheader.

// Clean Header
remove_action('wp_head', 'feed_links_extra'); // Display the links to the extra feeds such as category feeds
remove_action('wp_head', 'feed_links'); // Display the links to the general feeds: Post and Comment Feed
remove_action('wp_head', 'rsd_link'); // Display the link to the Really Simple Discovery service endpoint, EditURI link
remove_action('wp_head', 'wlwmanifest_link' ); // Display the link to the Windows Live Writer manifest file.
remove_action('wp_head', 'index_rel_link' ); // index link
remove_action('wp_head', 'parent_post_rel_link', 10); // prev link
remove_action('wp_head', 'start_post_rel_link', 10); // start link
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10); // Display relational links for the posts adjacent to the current post.
remove_action('wp_head', 'wp_generator'); // Display the XHTML generator that is generated on the wp_head hook, WP version

סיכום:

בעזרת שינוי פשוט ניתן להקטין את זמן טעינה ב 40-70%.

אם יש לך הצעה לשיפור אשמח לקבל אותה :).

מחפשים פתרונות תכנות מקצועיים?

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