Не так давно ми публікували статтю " Як покращити захист сайту на WordPress: 11 порад ", в якій описували прості, але дієві поради щодо покращення захисту вашого блогу на WordPress. Сьогодні ми розглянемо, як оптимізувати ваш сайт, щоб він працював якнайшвидше . Так що, без зайвих слів, ось 10 порад щодо оптимізації вашого сайту на WordPress!
З точки зору програміста, WordPress дуже швидкий у порівнянні з іншими платформами... але все одно ми можемо оптимізувати сайти на WordPress, використовуючи поширені методики веб-оптимізації та деякі хороші WordPress-плагіни.
Рада 1: Віддавайте статичний контент із домену без cookie
80-90% часу відповіді сайту кінцевому користувачеві витрачається на завантаження компонентів сторінки: картинок, таблиць стилів, скриптів, флешу тощо. Тому віддача статичного контенту з домену без cookie – хороший підхід для всіх сайтів, де навіть маленька затримка в завантаженні чогось може призвести до великої сумарної затримки в роботі сайту. WordPress подбав про те, щоб забезпечити цю можливість.
Вам потрібно встановити дві наведені нижче константи у файлі wp-config.php
define("WP_CONTENT_URL", "http://static.yourdomain.com"); define("COOKIE_DOMAIN", "www.yourdomain.com");
Будь ласка, переконайтеся, що ви використовували bloginfo ('template _directory') для завантаження вашого статичного контенту у файлах теми.
Щоб дізнатися більше про те, як встановити домен без cookie для WordPress, прочитайте тут.
Рада 2: Встановіть заголовок терміну давності для статичного контенту
Установка в заголовку терміну закінчення актуальності конента у майбутньому підкаже браузеру, що можна кешувати і віддавати цей кешований контент до закінчення терміну. Ви можете встановити цей заголовок, внісши невеликі правки до файлу .htaccess . Я рекомендую використовувати код, який пропонує HTML 5 B oiler Plate . Ви можете переглянути цей код нижче:

<IfModule mod_expires.c> ExpiresActive on # Perhaps better to whitelist expires rules? Perhaps. ExpiresDefault "access plus 1 month" # cache.appcache needs re-requests # in FF 3.6 (thx Remy ~Introducing HTML5) ExpiresByType text/cache-manifest "access plus 0 seconds" # Your document html ExpiresByType text/html "access plus 0 seconds" # Data ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" # RSS feed ExpiresByType application/rss+xml "access plus 1 hour" # Favicon (cannot be renamed) ExpiresByType image/x-icon "access plus 1 week" # Media: images, video, audio ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month" # HTC files (css3pie) ExpiresByType text/x-component "access plus 1 month" # Webfonts ExpiresByType font/truetype "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" # CSS and JavaScript ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType text/javascript "access plus 1 year" <IfModule mod_headers.c> Header append Cache-Control "public" </IfModule> </IfModule>
Рада 3: Оголосіть константу для значень, що найчастіше використовуються в базі даних
Для розробників цією корисною порадою може бути зменшення кількості запитів до бази даних . Потрібно використовувати деякі функції WordPress, які викликаються найчастіше і більше одного разу на сторінці.
Наприклад, щоб отримати адресу головної сторінки, ми зазвичай використовуємо
get_option('home');. Ця функція насправді здійснює запит до бази даних та отримує звідти необхідне нам значення. Ми знаємо, що воно буде однаковим у всіх випадках і це значення знадобиться нам у різних місцях.
Що ж робити у цій ситуації?
Зазвичай я створюю нову константу у файлі wp-config.php ось так:
define('MY_HOME','http://www.yourdomain.com');
define('BLOG_NAME','Expert Developer');
Після оголошення цієї константи потрібно використовувати її замість get_option('home') або подібної функції. Це зменшить кількість запитів до бази на сторінці. Ви також можете встановити константи для директорії шаблонів.
Рада 4: Оптимізуйте вашу базу даних
Є кілька плагінів, які можуть взяти на себе оптимізацію та підтримку бази даних WordPress. Я просто перерахую деякі з них, але якщо ви пошукайте в WordPress Plugin Directory, ви знайдете їх набагато більше:
- Yoast Optimize DB
- WP DB Manager
Зверніть увагу , що багато великих «оптимізують/кешуючих плагінів», які допомагають з кешуванням і подібними речами, вже проводять свою оптимізацію - так що якщо у вас встановлений плагін, що кешує, можливо, це питання вже вирішене. Просунуті користувачі можуть просто використовувати PHPMyAdmin для оптимізації бази даних WordPress.
Рада 5: Кешування – ключ до успіху
Кешування – найважливіший фактор для оптимізації сайтів із високою відвідуваністю. Нещодавно ми вже писали огляд 5 непоганих плагінів для прискорення кешування, ви можете ознайомитися тут . У WordPress є багато хороших плагінів, які служать для цих цілей. Ці плагіни зазвичай створюють .html файли для кожного посту або сторінки і потім віддають ці html-файли замість того, щоб кожного разу робити запит до бази даних. Ось кілька хороших плагінів для кешування в WordPress:
- WP Super Cache
- Hyper Cache
- W3 Total Cache
Вище перераховані плагіни, які генерують html-файли для кожного посту або сторінки та віддають їх, але є також плагін, який кешує результат запиту до бази даних:
- DB Cache
Рада 6: Використовуйте CDN для сайтів з високою відвідуваністю
Використання СDN ( Content delivery network – система доставки контенту) – це найкраще рішення для сайтів з високою відвідуваністю. CDN – це система доставки контенту з оптимізованих серверів по всьому світу. Ці сервери працюють разом, щоб віддавати ваш контент з безлічі серверів.
Більшість CDN зараз платні і можуть бути досить дорогими. У нас є лише одна безкоштовна CDN :)
- Amazon S3
- Макс CDN
- Media Temple CDN
- вільний CDN
Рада 7: Стиснення та поєднання JS та CSS файлів
Стиснення JS і CSS дасть вам гарне покращення часу завантаження сайту, оскільки це зменшить загальний розмір вашої сторінки.
Ще одна хороша штука, про яку не варто забувати - поєднання JS і CSS файлів . Об'єднання різних файлів в один файл зменшить кількість http-запитів до веб-сервера.
Компресори JS :
- Компілятор закриття
Компресори CSS :
- CSS компресор
Ви також можете використовувати WordPress плагін wp m inify для об'єднання різних JS і CSS файлів в один файл.
Рада 8: Стиснення зображень
Як і стиснення CSS та JS, корисним може бути стиснення картинок на вашому WordPress сайті. Є плагін, який використовує API smush.it та надає стислі зображення вашому сайту на WordPress:
- WP Smush IT
Використання CSS Sprite також може бути корисним для зменшення кількості запитів HTTP.
Рада 9: Стиснення вашого статичного контенту за допомогою gZip
Стиснення статичного контенту за допомогою компресії gZip істотно змінить швидкість завантаження вашого сайту. Це хороший підхід також для веб-розробки загалом. Знову ж таки, звернуся до HTML 5 Boiler Plate.

Вам потрібно просто вставити у ваш .htaccess файл наступний код:
<IfModule mod_deflate.c>
# force deflate for mangled headers
# developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)s*,?s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
</IfModule>
<IfModule !mod_filter.c>
# Legacy versions of Apache
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>
</IfModule>
Рада 10: Керуйте eTags
eTags також використовуються для кешування, але якщо ви встановили заголовки з терміном актуальності статичного контенту, краще відключити функціональність eTags. Давайте подивимося, як вимкнути eTag за допомогою .htaccess файлу.
Щоб вимкнути eTag, вам потрібно вставити в .htaccess один рядок:
FileETag none
Щоб дізнатися про eTag більше, ви можете відвідати цю посилання.
Є ще багато порад та трюків із цього приводу, але я постарався показати найкращі поради «щодо співвідношення ціна/якість» для кожного, хто тільки збирається зайнятися оптимізацією свого сайту WordPress.





















Коментарі до запису: 10
На мою думку, надзвичайно корисний матеріал. Особливо після запуску googlelabs сервісу pagespeeds, адже швидкість стає все більш значущим фактором у роботі сайту.
Так ось як ви це робите))
WP-Compress-HTML — Це дуже корисний плагін, який дозволить вам прискорити ваш сайт.
Як він працює?
При створенні HTML сторінки Ви, напевно, використовуйте «пробіли». Це дозволяє вам легше читати HTML код і зрозуміти, де що знаходиться, але ці «прогалини» ігнорується браузером, вони тільки роблять Ваші сторінки більш об'ємними і уповільнює ваш сайт. Цей плагін дозволить видалити всі ці непотрібні прогалини. Можете переглянути код будь-якої сторінки на моєму сайті 8Kino.ru.
Швидкість мого сайту в середньому 0.50, скріншот - http://saveimg.ru/show-image.php?id=de1b9816f8c3ab15eda61090babfc990. Швидкість перевірив у цьому сервісі webwait.com
Машинний переклад немає гуд.
Не дуже розумію, як володарі знань «Як оптимізувати WordPress» досі не оптимізували свій сайт. У вас сайт вантажиться досить довго, для власника таких цінних знань. Мій сайт хоститься на jino.ru, одному з найкращих хостингів, я підключив memcached і віддаю на місяць по 130 рублів тільки за memcached обсягом 128 мегабайт, плюс там оперативної пам'яті 256 мб, а ще 170 рублів за сам хостинг. Але мій сайт вантажиться за 3 секунди, тому в століття технологій це довго. Мені здається всьому виною корявість самого WP, але на жаль замін гідних немає. Пробував використовувати хостинг на ASP.NET, але там єдина гідна CMS це Orchard і вона сира. Як результат, пишу свою CMS на Java, правда хостинг під неї коштує не дешево, але за те є шанс розібратися з технологічним процесом написання CMS на Spring MVC. І Java не на приклад швидше, хоча PHP здавалося б супершвидкою мовою. Загалом wordpress це cms для домогосподарок які викладають статті про те, як засолити гриби або відпрати пляму і не паряться через швидкості, тому що навіть не розуміють що таке швидкість. Як раніше, поки я не кодував DVD я не розумів, що таке погана якість, так і тут все пізнається в порівнянні. Загалом не рекомендую WordPress для серйозних проектів, оскільки WordPress пишуть сліпі індуси за якістю коду та постійними багами. Якщо треба розщедритися на DLE або на Bitrix за 5к і там повірте інші швидкості та можливості. Та й модулі це якась лівота, написані умільцями плагіни, які заміщають оригінальний код. Як не віриться, що ця приблуда працюватиме стабільно. А WordPress пишеться так, начебто, розробники з кожним разом все далі й далі проходять книгу по ОВП у PHP і такі «Е травні, це можна було зробити так, а ми писали милиці» і переписують не зберігаючи зворотної сумісності, звідси глюки та повільна робота .
А хочете, шановний, я відключу всі соціальні кнопки, віджети спільнот, банери яндексу та гугла — і ви побачите, як ця сторінка завантажиться менш ніж за секунду? Проведемо експеримент, чи повірите на слово?
А з написанням власної CMS на Java - ну що ж, удачі! Тільки WordPress при цьому не треба хаяти.
Сервер nginx, хостинг telepark.me, я думаю ви віддаєте суцільно кеш. Чи виходить це блог самого хостингпровайдера? Ваш результат 5 секунд, http://tools.pingdom.com/fpt/#!/eGE5jG/wpcafe.org. Ну в цілому якщо вам не ліньки, то я готовий подивитися чи завантажиться ваш сайт менше ніж за 1 секунду.
"Будь ласка, переконайтеся, що ви використовували bloginfo ('template _directory') для завантаження вашого статичного контенту у файлах теми."
Автор, можна докладніше розписати що це означає і як із цим працювати, тому що я новачок?
Буду дуже вдячний
Найкращий плагін WordPress для стиснення зображень WP Smush 2.0.6.1 версія PRO російською тут . Оптимізація автоматично під час завантаження, пакетне або вибіркове стиснення, резервне копіювання оригіналу. JPG, GIF (щодо PNG не скажу, у мене їх немає). Сам ним користуюся, у мене WP версія 4.2, доки претензій немає :-)
Ставте Гіпер Кеш і не ламайте голову