- Что такое кэширование и как оно осуществляется с помощью плагинов?
- Использование Redis или Memcached
- Второстепенное кэширование (объектное, баз данных, граватар).
- Минификация и объединение JS, CSS, HTML + Критический CSS (Critical CSS).
- Дополнительные функции: Lazy Load, CDN
- Тестирование кэширующих плагинов.
- Как будет проходить тест?
- Результаты тестирования кэширующих плагинов
- Подведение итогов
Давным-давно, в далекой галактике в 2015 году вышел пост на Хабре про лучшие кэширующие плагины. В нем победил премиальный плагин WP Rocket. При этом, судя по графикам он был в два раза быстрее, занявшего второе место Wp Super Cache!
У меня закралось сомнение, как плагины, которые делают одно и тоже, могут так значительно расходится в скорости загрузки страницы?
Стопудово, пост проплачен — подумал я (оценочное суждение) и закрыл сайт.
Несколько раз у меня было адское желание провести свой независимый тест и наконец показать миру истину! Но в итоге, забил и решил жить дальше 🙂 .
Благо, через 3 года я созрел, и сейчас, полон решимости дойти до конца…
Я постараюсь описать некоторые аспекты подробнее и более понятно для начинающего вебмастера, так как навряд ли этот пост будут читать Илоны Маски.
На всякий, напомню, на что влияет скорость загрузки сайта:
- на ранжирование в поиске (так сказал Google и Яндекс)
- на конверсию (доказано, есть статистические данные)
Возможно еще на что-то, в принципе — не важно, ведь это основополагающие факторы.
Что такое кэширование и как оно осуществляется с помощью плагинов?Перед тем как отобразить страницу, WordPress генерирует ее. Он обращается к базе данных, посылая множественные запросы и только получив ответ, начинает рисовать страничку.
Все кэширующие плагины, просто сохраняют страницу (код, картинки, текст) и кладут в папочку на сервере (хостинге).
Это приводит к ускоренной загрузке страницы и снижению нагрузки на сервер. Потому что посетитель, по сути, просто скачивает файлы с жесткого диска. Да, некоторые запросы могут посылаются в БД, но в разы меньше.
В итоге, здесь уже начинают работать другие факторы, не связанные с плагинами:
- Скорость интернета (как на отдачу с сервера, так и на прием посетителем).
- Скорость жестких дисков — проблем не должно быть, если у вас SSD диски.
- Сетевые задержки — для их уменьшения, можно использовать протокол http/2.
Так как WP Rocket мог оказаться в два раза быстрее Wp Super Cache? В два раза быстрее, Карл!
Конечно, кроме страничного кэширования у разных плагинов присутствует и иной функционал. К слову, на Хабре совершенно не указано, что включено или не включено.
Но даже если все решила минификация и Lazy Load, то второе место занял бы какой-нибудь Wp Fastest Cache.
Все остальное (кроме страничного кэширования), может ускорить общую загрузку сайта на 5-7% и то, при условии, что код сайта не оптимизирован.
Могут быть исключения, если все утыкано изображениями и видео, Lazy Load в этом случае может быть очень полезен. Сейчас во всем разберемся.
Использование Redis или Memcached
Нынче, в кэширующих плагинах стало модно использовать Redis или Memcached (например в плагине W3 total cache). Если простыми словами, то это инструменты, которые позволяют хранить данные не на жестком диске, а в оперативной памяти.
То есть, сохраненные странички, можно складировать не на SSD диск, а в оперативку.
В среднем, SSD способны передавать данные со скоростью около 300-500 Мб/сек,. Конечно есть и более быстрые модели, но они стоят значительно дороже и навряд ли хостинг, который продает услугу за ~ 120 рублей будет их использовать.
В оперативной памяти, даже если взять устаревшую модель DDR2, в зависимости от частоты, мы получим скорость передачи от 3.2 ГБ до 9.6 ГБ в секунду!
И поэтому бытует мнение, что страничное кэширование с помощью Redis или Memcachedзначительно ускоряет сайт. Конечно же это неправда и вот почему:
- Во-первых. SSD диски имеют время отклика ~ 0.1 мс, что вообще не влияет на скорость, так как это слишком низкий показатель. Да, оперативка еще быстрее, но какая дальше разница?
- Во-вторых. Все забывают, что в среднем, у большинства хостингов интернет со скоростью отдачи в 100 мбит/c, что является ~ 10 мегабайтами переданной информации в секунду!
Получается, чтобы с помощью внешних подключений, можно было использовался весь ресурс SSD, нужна скорость интернета в 3 Гбита/c и выше.
Очевидно, что подобные инструменты должны решать определенные проблемы. Само по себе, использование оперативной памяти для кэша, ничего не даст.
Второстепенное кэширование (объектное, баз данных, граватар).
Все эти функции имеются в некоторых плагинах. Вкратце, разберемся что это такое:
1) Объектное кэширование (object cache)
Когда WordPress (WP) обращается к базе данных (БД), WP может вызывать функцию get_option сотни раз, всего за 1 запрос. По умолчанию WP сам кэширует результат вызова функции, но только в момент запроса.
Плагины позволяют сохранять результаты вызовов функций и для последующих запросов.
2) Кэширование баз данных
Сохраняется результат запросов к БД, как правило не все, игнорируются которые могут нарушить работу сайта (известные авторам плагина). Например, у меня при использовании W3 Total Cache, кэшировалось всего 12-20 запросов из 100.
3) Кэширование граватар (gravatar)
Даже если комментариев много, обычно, они не отображаются все одновременно. Используются технологии Lazy Load или просто загрузка по клику (показать еще). Поэтому необходимость данного вида кэширования под вопросом.
Использование кэша (объектного и баз данных) может привести к перегрузке процессора и тогда вы получите замедление, а не ускорение.
Если используется кэширование страниц, эти три метода становятся еще менее значимыми. Ведь большая часть страницы уже сгенерирована. Мы узнаем насколько они эффективны чуть позже, когда приступим к тестированию плагинов.
Минификация и объединение JS, CSS, HTML + Критический CSS (Critical CSS).
Минификация, частая функция кэширующих плагинов. Которая позволяет немного ускорить сайты с не оптимизированным кодом.
Принцип прост, плагин берет все файлы JS и CSS и удаляет в них лишние пробелы и комментарии.
Часто их можно объединить в несколько или даже один файл. Это увеличит общую скорость загрузки, но может замедлить время начало отрисовки страницы.
Чтобы страница начинала быстрее рисоваться, можно отложить загрузку (JS и CSS) из верхней части сайта. Но в данном случае, сначала будет загружаться HTML и только потом все остальное.
Это приведет к некрасивым кракозябрам в момент загрузки. Чтобы этого избежать, нужно выделять и использовать критический CSS.
Если подобный функционал полностью или частично отсутствует, можно использовать Autoptimize.
Дополнительные функции: Lazy Load, CDN
Lazy Load — загружает картинки и видео по факту прокрутки экрана, а не заранее. Если на странице их много, это может значительно ускорить загрузку страницы.
CDN — Позволяет загружать сайт быстрее в далеких от сервера (хостинга) странах. Файлы сайта частично или полностью копируются на сервер страны. Услуга платная, подключается отдельно.
Ну вот и все основные функции, настало время перейти к самому интересному!
Тестирование кэширующих плагинов.Были выбраны 12 самых популярных и не очень плагинов. Все они поддерживаются разработчиками и получают регулярные обновления, на момент написания статьи, вот они:
- W3 Total Cache
- WP Super Cache
- WP Rocket
- WP Fastest Cache
- Hummingbird Page Speed Optimization
- Cache Enabler
- Gator Cache
- Hyper Cache
- LiteSpeed Cache
- Breeze
- Powered Cache
- WP Speed of Light
Как будет проходить тест?
Был приобретен тестовый период на VPS (2-ух ядерный процессор, 2 ГБ оперативной памяти) у хостинга Fozzy.
Конфигурация сервера:
Apache (FastCGI) + PHP 7.0 + Zend Opcache + MySQL 5.6.39
- За основу была взята тема Newspaper, скопирован объемный пост в 20к символов, с небольшим количеством картинок.
- Установлено 10 плагинов, дабы создать большую нагрузку.
- Добавлено 10 комментариев с разных email (дабы кэширования gravatar могло работать).
Тестироваться будет только основное и второстепенное кэширование плагинов. Не будут использоваться различные функции (Lazy Load, минификация и т.д), которые не относятся к кэшированию напрямую.
Данный функционал можно реализовать с помощью сторонних плагинов. И что важнее, его не всегда можно использовать для всех сайтов. Так как могут возникать ошибки или визуальные артефакты, от которых порой сложно избавиться.
Скорость загрузки сайта будет измеряться:
- Pingdom Tools — сервис который позволит измерить время загрузки сайта. Всего будет проведено 10 тестов с выводом среднего времени.
- PageSpeed Insights — сервис от Google, который рассказывает, что необходимо сделать, чтобы сайт загружался быстрее и дает оценку текущему состоянию.
Результаты тестирования кэширующих плагинов
Pingdom Tools | PageSpeed Insights | |||
Плагин | Ср. время (с.) | Моб. | Десктоп | Ускорение |
Без кэша | 3,12 | 39 | 60 | 0,00% |
W3 Total Cache | 1,40 | 74 | 68 | 122,70% |
W3 Total Cache (redis) | 1,39 | 74 | 68 | 124,30% |
Wp Super Cache | 1,36 | 74 | 68 | 129,62% |
Wp Rocket | 1,33 | 74 | 68 | 134,42% |
WP Fastest Cache | 1,40 | 74 | 68 | 122,70% |
Hummingbird Page Speed Optimization | 1,34 | 74 | 68 | 131,90% |
Cache Enabler | 1,42 | 74 | 68 | 119,39% |
Gator Cache | 1,40 | 74 | 68 | 122,70% |
Hyper Cache | 1,41 | 74 | 68 | 121,12% |
LiteSpeed Cache | 1,35 | 74 | 68 | 130,95% |
Breeze | 1,39 | 74 | 68 | 123,76% |
Powered Cache | 1,40 | 74 | 68 | 122,70% |
WP Speed of Light | 1,41 | 74 | 68 | 121,12% |
Очевидно, что при замере присутствует погрешность: не смотря на то, что она минимизировалась путем проведения 10 проверок.
Тем не менее, лучше всех оказался Wp Rocket, но на сколько?
Если посмотреть на максимальную разницу между лучшим и худшим результатом, то мы увидим что она составляет 0.09 с. можно сделать простой вывод:
Даже если представить, что это результат без погрешности (а он с погрешностью), это совершенно не существенный аспект из-за которого стоит делать выбор в пользу того или иного плагина.
Это примерно 6% разницы, а если взять остальные плагины, то результат практически не отличается от лидера.
Совершенно неправильно выбирать кэширующий плагин с точки зрения его быстродействия. Главным параметром должен служить дополнительный функционал, который необходимый именно для Вашего проекта.
Или наоборот, Вам может потребоваться только кэширование, так как лишние функции могут вызвать большую нагрузку.
Подведение итогов
Да, Wp Rocket один из лучших кэширующих плагинов, но не из-за скорости, а простоты настройки и его функций. В частности, лично меня порадовала не так давно появившаяся функция автосоздания критического CSS, работает не идеально, но неплохо.
Также хотелось поговорить про W3 Total Cache, у него были включены все виды второстепенного кэширвания, также я провел отдельный тест где, все это дело «запихивалось» в Redis (оперативную память).
Но это так и не помогло ему занять лидирующие позиции, что говорит низкой эффективности, всего прочего, кроме страничного кэширования. Наверное могут быть исключения, например тысячи запросов к БД, возможно тут W3 Total Cache, смог бы проявить себя гораздо лучше.
Заключение:
Если и тестировать кэширующие плагины, то в первую очередь по второстепенным функциям. В зависимости от тестовой среды, результаты у всех плагинов могут быть разными. А значит выбирать нужно исходя из конкретных нужд проекта.
Источник: Выбираем лучший плагин кэширования, топ 12 плагинов на 2018 год для WordPress.
Это интересно
0
|
|||
Комментарии временно отключены