
Уже давно планировал написать этот пост, да все ждал – то, когда мы выпустим новый важный функционал, то, недоработок в решении, как мне казалось, было еще много, то, летний спад посещаемости вот настал.. В общем надоело мне ждать идеальный момент – пишу как есть, а позже буду дописывать.
С пол года назад, дабы уже как следует, по взрослому, нагрузить наше типовое решение и протестировать его работу в реальных боевых условиях – мы внедрили его на уже давно успешно работающем интернет-магазине нашего клиента (по сути – лишь сменили дизайн, архитектура сайта идентичная.)
im24.ru – красноярский интернет-магазин бытовой и цифровой техники. Это наше флагманское внедрение, многий функционал и идеи решения выросли из этого сайта. Многие новые фичи мы тестируем и обкатываем тоже на нем. По сути – это выпущенный в тираж 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-хостинге (не требует администратора!) – всего за ~700 рублей в месяц (при оплате за год.) Данный хостер примечателен тем, что он единственный в своей панели управления имеет очень наглядный инструмент позволяющий визуально оценить нагрузку на CPU и БД веб-сервера оказываемую вашим сайтом.
Смотрим что мы имеем сейчас по нагрузке, скриншот:

Как видите, бывают отдельные эксцессы когда например приходится разом сбросить кэш у всех детальных страниц товара (обновить шаблон 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 рубль и для всех комбинаций параметров – это переполнит кэшем любое отведенное хостером место на диске..
Еще раз подчерну, что выбранная позволила нам использовать стандартные, уже хорошо отлаженные за многие годы работы, компоненты каталога 1С-Битрикс. Неоптимальных php-конструкций или ошибок кэширования в этих компоннетах – практически нет, чего вряд ли бы нам удалось избежать если бы выбрали другую архитектуру каталога и нам пришлось бы написать свои собственные компоненты. Кроме того, мы получаем с их обновлением все новые фичи платформы, а в случае проблемы с любым компонентом мы в любой момент можем и имеем на этом все права – обратиться в Техническую поддержку 1С-Битрикс, что я так же считаю очень важным моментом (а так как у нас так же полностью стандартный, то мы можем обращаться в ТП 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 |
Кто уже использует функцию "Ускорение сайта CDN" -- будьте бдительны.. 
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% конверсии!
Ребята, давайте будем реалистами, вот несколько замеров на популярных магазинах (это второй хит -- вся статика уже в кэше):

Ну и если кто-то из коллег видит еще узкие места и знает как сделать еще быстрее -- мы с удовольствием обсудим эту тему, она нам очень интересна!
