Уже давно планировал написать этот пост, да все ждал – то, когда мы выпустим новый важный функционал, то, недоработок в решении, как мне казалось, было еще много, то, летний спад посещаемости вот настал.. В общем надоело мне ждать идеальный момент – пишу как есть, а позже буду дописывать.
С пол года назад, дабы уже как следует, по взрослому, нагрузить наше типовое решение
im24.ru – красноярский интернет-магазин бытовой и цифровой техники. Это наше флагманское внедрение, многий функционал и идеи решения выросли из этого сайта. Многие новые фичи мы тестируем и обкатываем тоже на нем. По сути
К слову:
Проект im24.ru был запущен в конце 2008 года.
В каталоге интернет-магазина представлен широкий ассортимент товаров всемирно известных брендов – всего более 150 товарных категорий! Это более 25000 товарных позиций, а следовательно и – более 150 страниц с фильтром и более 25000 детальных страниц товаров на сайте ! Покупки в интернет-магазине совершили уже более 10 000 красноярцев, которые оформили уже более 20 000 заказов! А ежемесячный оборот достигает 7 миллионов рублей. Посещаемость ресурса в отдельные дни доходит до 2500 уникальных посетителей и 12500 хитов в сутки .
Возможно, что позже я даже напишу отдельный пост, в котором опубликую бизнес-план открытия интернет-магазина бытовой и цифровой техники..
Сейчас же, я хочу подробно остановиться на нагрузочном тестировании решения проекта:
I. НА СТОРОНЕ СЕРВЕРА
Сайт работает на редакции продукта «Малый бизнес».
Посещаемость проекта в данный момент составляет ~500 уникальных посетителей в сутки и ~2500 хитов, скриншот:
На самом деле, это мало – сказывается летний период, а так же смена правил построения ЧПУ, которая привела к выпаду большого % страниц из поисковой выдачи.
Важное замечание: это без учета поисковых ботов – внешняя статистика их не считает, однако логи веб-сервера фиксируют, что различные боты ежедневно создают от 5000 до 20000 дополнительных хитов! Это огромная дополнительная нагрузка на веб-сервер!
Возможно, что позже я напишу отдельный пост о том как мы с этим боремся..
+Ежедневно происходит синхронизация с 1С Предприятие 8.2.
Хостинг
Сайт размещен на обычном shared-хостинге (не требует администратора!)
Смотрим что мы имеем сейчас по нагрузке, скриншот:
Как видите, бывают отдельные эксцессы когда например приходится разом сбросить кэш у всех детальных страниц товара (обновить шаблон bitrix:catalog.element) чтобы например добавить какие-нибудь кнопки, а страниц на сайте напомню – более 25000! Или один из поисковых ботов начинает чрезмерную активность и с этим приходится бороться.. Или менеджер через чур активно начинает обновлять цены товаров выгружая их из 1С Предприятие, что так же приводит к сбросу управляемого кэша страниц.
Но, в целом, как видите, все последние 5 лет – сайт вполне укладывается в выделенные на на данном тарифном плане лимиты по процессорному времени и оперативной памяти.
Исключение составляет месяц декабрь, когда предновогодний ажиотаж приводит к резкому увеличению посещаемости сайта в разы! В предыдущие годы мы даже на 1 месяц переводили сайт на боле дорогой тарифный план – Premium. Но, к сожалению, в этом году аппаратные лимиты этого тарифного плана хостер урезал до лимитов текущего тарифа и вроде как запретил смену лишь на 1 месяц. Жаль – в декабре 2013г. нам придется рассматривать другие варианты, скорее всего облачные..
При этом, посмотрите, пожалуйста, производительность веб-сервера, которую нам дает хостер на данном сервере, скриншот:
Не супер-пупер конечно, но близкая к эталону..
Итого, мы имеем сайт работающий на ПО 1С-Битрикс редакции «Малый бизнес» типовом решении «Битроник» состоящий из более чем 25000 страниц, с о средней посещаемостью 1000 уникальных посетителей в сутки, который хостится на простом хостинге не требующем администратора – за 700р. в месяц.
Для того чтобы добиться таких результатов мы провели тщательный аудит Битроника при помощи встроенного в 1С-Битрикс инструментария -- Монитор производительности и добились того, чтобы в решении не было ни одной ошибки разработки, скриншот:
Исключения составляют два стандартных компонента с запросами к БД:
1. остался запрос на генерацию CAPTCHA стандартным компонентом формы обратной связи bitrix:main.feedback, который кэшировать нельзя, но позже мы сделаем эту форму подгружаемой через AJAX и
2. запрос стандартным компонентом корзины bitrix:sale.basket.basket.small, который смотрит в БД какие товары лежат в ней у конкретного Гостя.
А самую большую нагрузку сейчас создает стандартный компонент «Умный фильтр» bitrix:catalog.smart.filter результат работы которого, как я понимаю кэшировать не удастся, ведь если мы создадим кэш с шагом в 1 рубль и для всех комбинаций параметров – это переполнит кэшем любое отведенное хостером место на диске..
Еще раз подчерну, что выбранная
Замеры скорости генерации страниц на сервере основных страниц сайта:
Главная страница:
Список товаров вид список:
Список товаров вид таблица:
Список товаров вид плитка:
Детальная страница товара:
Как видите – скорость генерации страниц, с работающим автокэшированием, по сайту редко когда превышает 0,2-0,5 секунды. И здесь я считаю мы уже поработали хорошо.
II. СКАЧИВАЕМ СТРАНИЦУ
Далее сгенерированную веб-сервером страницу должен скачать ваш браузер. Мой FireFox 22.0 со всем содержимым выкачивает ее за ~6 секунд, скриншот:
Замечание тут следующие:
1. К сожалению, на данный момент Таймвеб не всегда кэширует "Ускорение сайта CDN" Обсуждалось
UPDATE 27 августа 2013 года:
Владелец магазина добился от хостера исправления ошибки в настройках веб-сервера и теперь вся статика попавшая в CDN кэшируется правильно. За что, хостеру конечно -- спасибо.
Однако, при заходе клиентов из Красноярска (а это основная целевая аудитория данного интернет-магазина) мы видим, что вся статика отдается нам с московских серверов (напомню, что серверы хостера территориально находятся в Санкт-Петербурге), скриншот:
Видя IP-адерс (например 91.238.111.146) это легко определить с помощью например сервиса:
Непонятно, почему не из Красноярска или не из хотя бы Новосибирска????
Ответ ТП 1С-Битрикс:
Наиболее оптимальный маршрут определяется автоматически по разным показателям. Алгоритм определения маршрута мы вам сказать не можем. |
Хотя, судя по карте покрытия --
UPDATE 28 августа 2013 года:
Необъяснимо, но факт!
Сегодня вся статика сайта, для красноярских пользователей, стала отдаваться с IP-адреса:
IP 93.92.71.147 Хост: 93.92.71.147 Город: Красноярск Страна: Russian Federation IP диапазон: 93.92.64.0 - 93.92.71.255 Название провайдера: JSC Webra |
UPDATE 5 декабря 2013 года:
Мы перевели подгрузку табов со спецблоками (новинки, хиты, разпродажа, бестселлеры) на AJAX. Таким образом их нет в DOM-структуре страницы изначально и на сервере изначально выполняется только 1 компонент из 4-х. Остальные выполняются и отображают содержимое непосредственно при клике.
Так же мы переведи на AJAX форму обратной связи в шапке сайта. Ранее она подгружалась на каждом хите хотя и не была видна пользователю, но в DOM присутствовала, а кроме того она генерировала CAPTCHA на каждом хите... Сейчас форма подгружается через AJAX только при непосредственном ее вызове.
Делаем замеры:
a. Браузер полностью закэшировал сраницу -- жмем Enter в адресной строке браузера для обновления (1,43 сек.)
b. Обновляем страницу через F5 (2,6 сек.)
c. Сбрасываем кэш через Ctrl+F5 (5,07 сек.)
2. Кроме статики самого сайта, скачиваются еще и всяческие «свистелки»: вконтакте, фейсбук, счетчики гугл.аналитикс и яндекс.метрика, различные другие партнёрки вроде: orphus и reformal итд -- это все так же дает какие-то секунды. Если нужно больше скорости – все это лучше отключить.
3. На данный момент отключена стандартная опция 1С-Битрикс объединения и сжатия всех js и css файлов — мы еще тестируем ее корректную работу с нашим решением и планируем включить ее в ближайшее время.
На данном этапе, еще есть резерв ускорения за счет более тонкой настройки Хостинга, объединении файлов + по желанию отключение партнерок..
UPDATE 27 августа 2013 года:
Продолжаем тестировать опции:
Объединять JS файлы,
Создавать сжатую копию объединенных CSS и JS файлов.
По результатам тестирования найден один недочет в 1С-Битрикс и создана заявка в их отдел разработки.
Комплекс мер на этапе II уже позволил отвоевать целую секунду только за счет включения стандартных опций 1С-Битрикс, скриншот:
UPDATE 30 апреля 2014 года:
Включили в решении работу в "композитном режиме". На скриншоте вся статика сайта уже в кэше браузера -- DOM главной страницы сайта отдается всего за 76мс (ранее было около ~400)
в композитном режиме уже работает: главная страница сайта, страницы списка товаров (3 вида), из-за того что детальная страница товара в Битронике оканчивается на .html -- режим композита на ней пока не включается (создано обращение в ТП 1С-Битркис, ждем решения этого вопроса.)
III. НА СТОРОНЕ КЛИЕНТА
Браузер должен произвести рендеринг скаченной страницы. Это так же занимает некоторое время. В нашей верстке используются самые передовые технологии: CSS3 и HTML5, jQuery для реализации различного функционала (в то числе AJAX.) Чем современнее и мощнее ПК посетителя, чем новее версия его браузера -- тем рендеринг страницы происходит быстрее.
Мы еще подбираем инструменты для замеров скорости работы Java Script. В целом здесь я еще вижу большой потенциал для будущего ускорения за счет оптимизации кода Java Script и различных CSS+HTML конструкций.
ВЫВОДЫ
Многие авторы критиковали выбранную нами архитектуру товарного каталога на основе множества инфоблоков, дескать, зачем нужны такие сложности итд. Покажите нам другое типовое решение Маркетлейс с более чем 150 товарных категорий с собственными уникальными свойствами в фильтре каждая (причем все это работает на стандартных компонентах), с более чем 25000 детальных страниц товаров, которое будет хоститься на shared-хостинге (не требующем администратора) за 700р в месяц при средней нагрузке в 1000 уникальных посетителей в сутки? То-то же!
Хотите быстро запустить реально работающий продающий прибыльный интернет-магазин цифровой и бытовой техники – выбирайте
UPDATE 27 августа 2013 года:
После публикации данного отчета, несколько клиентов написало нам:
-- Боже! Боже! Целых 6 секунд на скачивание и генерацию страницы! Это чудовищно! Должно быть меньше одной секунды. Ведь, каждые 0,1 секунды это -1% конверсии!
Ребята, давайте будем реалистами, вот несколько замеров на популярных магазинах (это второй хит -- вся статика уже в кэше):
Ну и если кто-то из коллег видит еще узкие места и знает как сделать еще быстрее -- мы с удовольствием обсудим эту тему, она нам очень интересна!