Как максимально ускорить скорость работы сайта?

Здравствуйте.

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

У нас интернет-магазин женской одежды крутится на 1с-Битрикс (прошу не писать, что нужно менять фреймворк) товаров около 8000, посетителей в день около 700.
Проблема в том что сайт работает очень медленно.
По бекэнду:
  • Сервер считаю шустрый:
    Процессор: Intel® Xeon® E3-1270 v3
    Оперативная память: 16GB
    Жесткие диски: SSD
  • На сервере nginx+apache, пробовали nginx+php-fpm особого ускорения не получили, вернулись на apache
  • Все что можно кешируются, работает композитный сайт
  • Таблицы все проиндексированны. При тестировании скорость ответа от mysql быстрая
  • Все что можно кешируются, работает композитный сайт


По фронтэнду:
  • Изображения сконвектированны в webp и настроена ленивая загрузка
  • Частично удален неиспользуемый js и css. Весь js и css сжат и объединен средствами Битрикс, что можно подгружаем отложенно
  • Минимизировано подключение к внешним источникам. Остались Яндекс.Метрика, Google Analytics, Roistat и RetailRocket, маркетологи уперлись, на дают их удалять


Проведенные работы немного ускорили работу сайта, но все равно он работает очень медленно.
Как на эталон смотрим на сайт wildberries, смотрим и восхищаемся скоростью загрузки странице. В каталоге страница загружается моментально в Network видно контент отдается моментально:
5e1ea6eab93c5608603848.png
Такой скоросте мы не можем обеспечить даже на главной странице где нет товаров, про каталог я молчу, там счет идет на секунды:
5e1ea74bc1478163216974.png

Как можно приблизиться к показателям wildberries? Как они достигают таких результатов?

/* ------------------------- */
Спасибо всем за отклик. К сожалению в ближайшие дни нет возможности воспользоваться вашими советами, со следующей недели начну вникать в то что вы понаписали.
Отвечу тут всем по вопросам в комментариях.
  • Сайт: wisell.ru
  • Версия PHP: 7.1
  • htop показывает что сервер вообще не напрягается в бОльшее время работы, LA не превышает 2
  • Mysql хватает памяти

Сайт старый, работало много разных специалистов, каждый оставил свои костыли, так что в первую очередь займусь отладкой php
  • Вопрос задан
  • 2261 просмотр
Решения вопроса 3
@anton99zel
29а класс средней школы №7
Автор, в данном случае требуется комплексный подход
1. На маркете Битрикса есть пару модулей, которые адаптируют ваши картинки
2. Работа с CSS. Это оптимизация - минимизация и объединение стилей
3. Тоже Js
4. Далее по шаблонам - нужно пересмотреть код, возможно одни куски должны быть выше-ниже или убраны вообще.
5. Скрипты метрики и т.п. нужно подгружать со своего сервера, обновляю их по крону
6. Шрифты - тоже грузить со своего сервера, внести правки в css (CSS font-display)
7. Использовать серверное сжатие и кэш. Сократить запросы к базе. Компоненты если кэшируются не должны делать запросов.
8. CDN не всегда идёт на пользу
9. Общее количество элементов DOM можно сократить убрав в верстке лишние div ки и прочие элементы

В целом, вам pagespeed сам подсказывает что нужно сделать - гуглите каждый пункт.
Естественно, что на стороне cms у вас всё должно соответствовать нормам - т.е. внутренние тесты должны отрабатывать на отлично.

Средний Интернет-магазин на Битриксе можно довести до 95 попугаев. В мобильной верстке и вовсе до 100.
Ответ написан
Прежде всего, хотелось бы отметить, что данные которые вы показываете на скриншотах (Network) не актуальные, все ресурсы на них закешированы (memory cache/disk cache).
Актуальные данные по таймингам вы увидите если обновите страницу через CTRL+SHIFT+R (это сброс кеша на вкладке).
Без этого пока видно что вся статика, что у вас, что у них грузится за 0ms, некоторые ваши ресурсы с disk cache за 15+ms.

Проверил что у вас там. Ответ от сервера 200/300+ мс. Не так критично как вы пишите, даже в каталоге, но не так как могло бы быть.

По существу.
"Сайт старый, работало много разных специалистов, каждый оставил свои костыли" - вот из-за этого.

По серверу: не хватает http/2 протокол + 304 заголовок где возможно (получится не везде https://last-modified.com/ru/), TLSv1.3

Варианты по коду:
1. Вариант - ставьте чистый обновленный битрикс и перепишите все сами без костылей.
2. Вариант, не тривиальный - унесите cms на поддомен (admin.*, к примеру), а фронтенд перепишите каком-нибудь легковесном frameworke где есть быстрый кеш. Перепишите классы работы с товарами (корзина/заказ), авторизацию, и подключайте к БД вашей cmsки. Потребуется знать архитектуру конкретной cms, много времени и печенек.

И я подозреваю что у wildberries сервак все равно помощнее.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Вариантов не много:
1. Разобраться с кешированием (везде!)
2. Разобраться с утилизацией модулей битрикса.
3. Отключить лишние обработчики в apache для статического контента.
4. Проверить везде актуальность версий хостинг-окружения и всего установленного ПО: cms, её модулей и т.д.
5. Создать правильную асинхронную отложенную загрузку всего фронт-контента.
Ответ написан
Пригласить эксперта
Ответы на вопрос 9
Giperoglif
@Giperoglif
php разработчик
8000 товаров и 700 посетителей) с таким мой телефон справляться должен без проблем, а не
Процессор: Intel® Xeon® E3-1270 v3
Оперативная память: 16GB
Жесткие диски: SSD


о каком wildberries вообще тут речь.
что-то битрикс совсем плох стал.
Ответ написан
Fqyeh29
@Fqyeh29
↓ ИМХО ↓
Включите отладку:
5e1ebe9da47d1424580792.png

И увидите сколько времени занимает каждый компонент. Ищите долгие и разбирайтесь с ними индивидуально.
5e1ebe10b6f6d259225638.png
Ответ написан
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Шаг первый: Избавиться от битрикса.
Шаг второй: PROFIT!
Ответ написан
aliencash
@aliencash
Партизан
Скрипты метрики и аналитики можно использовать локально, если обновлять их ежесуточно по крону.
Ответ написан
zettend
@zettend
Разрабатываю крутые сайты и сервисы
Выведи фронт на REST-API, включи кеширование JSON. Отдай картинки CDN. Оболочку лучше будет отрисовывать REACT’ом.
Ответ написан
fo_otman
@fo_otman
Веб-разработчик
Переводить каталог на ElasticSearch. Рефакторить код. Подключить php 7+. Передать часть отрисовки страницы на сторону клиента.
Ответ написан
BojackHorseman
@BojackHorseman
...в творческом отпуске...
В каталоге страница загружается моментально в Network видно контент отдается моментально:

там вся статика с локального кэша, написано же. ctrl + f5 жмите. и быстрый ответ от сервера.

а у вас ответ от сервера длинный. профилируйте, что там происходит в это время.
Ответ написан
зависит как от сборки сайта так и от интерфейса так и от настроек сервера.
дай для начала сам сайт.
Ответ написан
@yaBliznyk
Смотри htop, на сколько нагружен сервер.
Opcache должен быть включен и настроен
Версия php какая?
Mysql хватает памяти для работы? Если запросы отрабатывают быстро в ручном режиме, то ищи затык в php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы