С ростом посещаемости сайта увеличивается нагрузка на CPU и MySQL. И примерно через неделю Timeweb начинает настойчиво просить дать им больше денег перейти на другой тариф. Что ж, их можно понять: сайт потребляет больше ресурсов, чем заложено по тарифу. Но прежде чем доплачивать, давайте попробуем избавиться от нагрузки.
В интернете есть множество статей с десятками пунктов, как уменьшить нагрузку. Что там только не пишут: и lazyload (Google PageSpeed рекомендует), и gzip-сжатие, и написание директив в robots.txt, и выставление кэша в .htaccess для статических файлов (хотя на дворе 2019 год и 95% хостеров делают это за вас), и многие другие мелочи.
Нет, сделать lazyload - это супер, и обработку картинок на стороне сервера тоже круто, и обязательно собрать все стили в один CSS-файл, и скрипты в футер + async. Но в плане уменьшения нагрузки это не поможет. Действительно рабочих методов лишь несколько.
1. Включить кэширование.
Для Joomla я использую компонент Jotcache. Каждый сам для себя решает, какое время кэширования ставить. Так как у меня новостной сайт, я ставлю 5 минут. Но если скорость добавления и обновления информации не играет ощутимой роли (например, для сайтов-статейников), можно ставить и 30-90 минут.
P.S. Стандартные встроенные компоненты тут не помогут. Кэширование должно сократить нагрузку в 2-3 раза.
2. Сократить количество запросов к БД.
Каждый включенный компонент, модуль, плагин или расширение - это дополнительные запросы к базе данных. Особенно, если это связано с любым контентом. Криво написанные модули могут делать десятки запросов к БД. Например, модуль "последних записей" может делать не 1 запрос к БД, а столько, сколько записей выводится.
Например, этот делает около 20 запросов:
Какое решение? Убирать модуль, искать другой, уменьшать количество запросов экспериментальным путем.
3. Заблокировать чересчур активных ботов.
Нужно зайти в /ваш_сайт/access_log и посмотреть, кто там и что там. Если находим слишком активных ботов, от которых нет никакого толку, блокируем их.
Для этого заходим в .htaccess и дописываем такие строки:
RewriteCond %{HTTP_USER_AGENT} PycURL [OR] RewriteCond %{HTTP_USER_AGENT} Aport [OR] RewriteCond %{HTTP_USER_AGENT} ia_archiver
PycURL, Aport, ia_archiver - это названия ботов. Каждая строка в списке заканчивается [OR], а последняя - просто названием бота.
Кстати, некоторые еще предлагают игнорировать ботов через robots.txt, но большинство обходит эти директивы.
Если ваш сайт состоит из 10к+ страниц, поверьте, это существенно снизит нагрузку. Для большого сайта даже с небольшим трафиком одни лишь только боты могут вызывать нагрузку, выходящую за рамки базового тарифа.
У моего сайта сейчас не сезон, посещаемость - 200 человек в сутки. Но в access_log 14700 записей. Из них:
- Semrush - 4000
- YandexNews (RSS) - 4600
- YandexBot - 1300
- GoogleBot - 700
- Bing - 300
- DotBot - 500
- Mail.RU_Bot - 400
- Остальные 2000 - боты, реальные люди и прочее.
Когда я писал эту статью, то заметил что в один день megaindex.ru полностью пропарсил сайт, из-за чего нагрузка поднялась до 3000s (лимит 1000).
Semrush ранее был более скромным, но постоянные 30% запросов в день от общего числа - тоже причина отправиться в бан. Что касается YandexNews, который делает запрос к RSS-ленте, то RSS-лента - с пятью последними новостями, что делает нагрузку не такой ощутимой даже при 4600 запросах в сутки.
Semrush, Ahrefs, Megaindex, Linkpad, Moz и т.д. - просто парсят ваш сайт с целью узнать внешние ссылки и их направление. Кого блокировать, а кого оставлять - на ваш выбор.
Но в любом случае, с помощью этих методов вы сможете снизить нагрузку и, возможно, вернуть ее в рамки своего текущего тарифа.
Комментарии