18 августа 2012 г.

Ускоряем загрузку вордпресса с помощью файлов header.php и .htaccess

Скорость загрузки сайта — это пипец как важно! Особенно для любителей виртуального хостинга, да и вообще для всех любителей вордпресса. Ниже приводятся несколько советов, включающих в себя редактирование файлов header.php и .htaccess, с последующим ускорением загрузки сайта процентов эдак на 50-70%.



А пока ещё одна вводная. Что для нас сегодня означает скорость загрузки сайта? Да это самая важная часть в разработке сайта: от того, как быстро грузится ваш сайт, зависит лояльность посетителей.

Как нам говорит Гугл, сайты с загрузкой более 500 миллисекунд теряют примерно 20% посетителей с поиска.

Yahoo утверждает, что до 10% пользователей жмут в браузере кнопку «Назад», если сайт грузится более 400 миллисекунд.

А для Амазона вообще 100 миллисекундная задержка откусывает 1% от всех продаж.

Короче, кошмар да и только! Тем более, что Гугл теперь взял на вооружение выводить ближе к топу сайты, которые грузятся быстрее. То есть если у вас громоздкий и неповоротливый сайт, то Гугл может запросто понизить его в своём поиске до фиг знает каких дебрей, в которых даже годной порнушки не отыскать.

Хорошо, что у нас есть возможность с помощью нескольких трюков уменьшить скорость загрузки блога, чем мы сейчас и займёмся. Кстати, на вооружение можно взять и советы Yahoo по оптимизации загрузки сайта. Тоже годная штука.

Итак, понеслось!



Шаг 1. Включаем компрессию Gzip


Сжатие Gzip позволяет уменьшить размеры всяких xml-, html-файлов, стилей, скриптов, короче, всего до кучи, кроме всяких картинок и pdf-ов.

То есть вот нам +1 балл в скорость загрузки сайта.

Пишем в .htaccess


Для серверов на Apache

Есть такой модуль mod_pagespeed. У буржуев он поддерживается хостингами GoDaddy и DreamHost, про русские не знаю, потому что не проверял, а сама эта статья, которую вы сейчас читаете, — переводная с буржуйского. Так что можете попробовать это самостоятельно на своём хостинге, вдруг заработает. Вставляем следующее:

<IfModule pagespeed_module>  
    ModPagespeed on  
</IfModule>  

Ну а если эта штука не поддерживается вашим хостингом, то ставьте так:

<ifModule mod_deflate.c>  
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript  
</ifModule>  

Для Nginx серверов

Ежели у вас на хостинге настроен Nginx, активируйте GZIP-сжатие, вписав в .htaccess следующую запись:

server {  
    gzip on;  
    gzip_types text/html text/css application/x-javascript text/plain text/xml image/x-icon;  
}  

Пишем в header.php


Ну а коли ваш тщедушный хостинг не поддерживает ни mod_deflate, ни mod_gzip, тогда вписывайте в файл header.php вашей шкурки следующий кусок кода, который поддерживается как серверами на Apache, так и на Nginx:

<?php  
if ( substr_count( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) ) {  
    ob_start( "ob_gzhandler" );  
}  
else {  
    ob_start();  
}  
?>  

И да придёт к вашему блогу с сжатием GZIP ускорение загрузки, коего вы ещё не ведали. И да прибудет с вами сила господня! Аминь.



Шаг 2. Отключите ETags


Что такое ETags, я сам не знаю, ибо обделён умом шибко. Так что не спрашивайте меня. Но есть люди, которые понимают всю прелесть этого явления и одновременно с этим рекомендуют его отключить, если оно без надобности. А мне что-то подсказывает, что оно нам не особо-то и надо. Поэтому отключаем, вписывая в .htaccess следующее:

Header unset ETag  
FileETag None  



Шаг 3. Используем кэширование браузера


Кэширование браузера — это чётко, да. Загрузили сайтик, браузер записал себе его некоторые элементы и при следующем обращении к сайту, эти элементы подгружаются из кэша браузера, вместо очередного запроса к серверу, что очень хорошо.

Без кэширования в браузере наше путешествие по сайту напоминает постоянное хождение в магазин за очередным стаканом воды, вместо того, чтобы взять сразу баллон литров на двадцать и не ходить потом сто раз в магазин, когда захочется попить.

Кэширование экономит как трафик, так и пропускную способность вашего канала, и потому посетители вашего сайта становятся вам ближе и роднее, влюбляясь в сверхбыстрый сайт.

При первом посещении страницы вашего блога посетитель закачивает к себе в браузер её основные данные и при последующем обращении браузер минует обращение к серверу, вытаскивая данные из себя. Всё просто.

Для Apache-серверов


На Апаче эти все штуки настраиваются с помощью модулей mod_expires и mod_headers.

Этими модулями можно указать какие типы файлов должны быть закэшированы и насколько по времени. Они похожи между собой по действиям и можно ставить любой из них, не вдаваясь в особые подробности.

В .htaccess пишем:

# BEGIN Expire headers  
<ifModule mod_expires.c>  
    ExpiresActive On  
    ExpiresDefault "access plus 5 seconds"  
    ExpiresByType image/x-icon "access plus 2592000 seconds"  
    ExpiresByType image/jpeg "access plus 2592000 seconds"  
    ExpiresByType image/png "access plus 2592000 seconds"  
    ExpiresByType image/gif "access plus 2592000 seconds"  
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"  
    ExpiresByType text/css "access plus 604800 seconds"  
    ExpiresByType text/javascript "access plus 216000 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"  
</ifModule>  
# END Expire headers  

Или так:

# BEGIN Cache-Control Headers  
<ifModule mod_headers.c>  
    <filesMatch "\.(ico|jpe?g|png|gif|swf)$">  
        Header set Cache-Control "public"  
    </filesMatch>  
    <filesMatch "\.(css)$">  
        Header set Cache-Control "public"  
    </filesMatch>  
    <filesMatch "\.(js)$">  
        Header set Cache-Control "private"  
    </filesMatch>  
    <filesMatch "\.(x?html?|php)$">  
        Header set Cache-Control "private, must-revalidate"  
    </filesMatch>  
</ifModule>  
# END Cache-Control Headers  

Заметочка:

Не надо вписывать второе, если вписали первое, потому что оно уже содержит в себе совпадающий порядок действий для кэширования.

Для NGINX-сервера


Для NGINX запись в .htaccess будет примерно следующего вида:

location ~* \.(jpg|png|gif|jpeg|css|js)$ {  
    expires 1h;  
}  

То есть в течение часа html-странички, стили, скрипты и прочее будет забираться из браузера, минуя обращение к серверу.



Шаг 4. Уменьшаем размер базы данных


Большая база данных — это всегда геморрой. Уменьшает любимым способом — отключением добланых ревизий, которые ну нафиг не нужны. Впрочем, если вам нужны, то пропускайте этот шаг.

В файл wp-config.php надо вписать:

define('WP_POST_REVISIONS', false );  

Или вы можете оставить минимальное количество ревизий на всякий случай. Как это сделать, описано тут.



И ещё...


Не знаю зачем, но, может, вам надо отследить сколько просиходит запросов к базе данных за определенный период времени. Для этого в footer.php шкурки вашего сайта можно вписать такую кракозябру:

<?php echo get_num_queries(); ?> запросов <?php timer_stop(1); ?> секунд. 

Которая должна будет внизу сайта выводить желаемую вами скромную информацию о нагрузке.



Такие дела, чуваки! Конечно, я спердолил эту статью с буржуйского блога, и конечно же, вы знаете кучу более крутых методов по оптимизации блога на вордпрессе. Поэтому, если не жопитесь, то поделитесь ими с нами в комментариях. Салют!


1 комментарий:

  1. маладэс мине тут у тебя понравилос поскрыптум

    ОтветитьУдалить