Работы по оптимизации

Не секрет, что вопрос скорости загрузки сайтов на сегодняшний день является одним из определяющих факторов, при выборе CMS. Поскольку Е5 является фреймворком и претендует на весьма широкий функционал, скоростью она похвастаться не может.

На тестовой версии Е5, которую я сейчас обкатываю, размещается порядка 30и сайтов (в рамках одного виртуального хостинга). Суммарный объём информации на всех сайтах - 89.4мб.

До оптимизации, скорость загрузки типовой страницы колебалась от 0.6 до 0.8 секунды. На страницах повышенной сложности (главная страница интернет-магазина, большой каталог статей с архивом) скорость загрузки падала до 3 секунд. На самых сложных ресурсах (каталог недвижимости, объёмный прайс-лист) скорость могла упасть до 15 секунд.
Кроме того, количество продуцируемых запросов могло достягать нескольких тысяч, а количество затронутых строк - десятков тысяч (на том же портале недвижимости, в каталоге фигурирует порядка 10 тысяч вариантов). В среднем уходило 300 запросов.
Для предотвращения долгих запросов Е5 использует всевозможные варианты кеширования шаблонов. Но согласитесь, один кеш не спасёт, особенно в тех случаях, когда информация постоянно меняется.

Мне удалось обнаружить основную причину долгих загрузок и большого количества обращений к БД. Причиной всему было поэтапное извлечение данных из базы данных. Наш интерпритатор шаблонов просто не мог угадать какие именно данные будет использовать пользователь в своём шаблоне. По этому, вместо того, чтобы выгружать вообще все данные (что совсем нелогично), интерпритатор загружал их постепенно, по мере сталкивания с данными в шаблоне. Следовательно, напрашивался вывод - чтобы обеспечить нормальную выгрузку данных, нужно научить интерпритатор видеть какие данные могут понадобится в том или ином шаблоне.

Какие работы по оптимизации были проведены?

1. В интерпритатор добавлена возможность подгружать все необходимые для работы с шаблоном данные одним запросом (для этого в него добавлен анализатор, просматривающий то, какие столбцы будут участвовать в текущем шаблоне / переборе);

2. Переработана функция обработки текста explodeA. Теперь она работает в 10 раз быстрее. Эта функция может вызываться несколько тысяч раз во время загрузки одного сайта (благо функция очень лёгкая и быстрая);

3. Добавлена возможность физического кеширования направляющих шаблона. Во время чтения шаблона интерпритатором, он придаёт ему удобную для работы форму - в виде схемы. Эта схема и кешируется на жёстком диске сервера. Итого мы получаем -30% к первому запуску страницы и +15% к скорости всех дальнейших запусков (при этом кеш является глобальным, без привязки к адресу и т.д.)

4. Добавлены новые виды кеширования шаблонов (^# - кеш, независимый от адреса, но зависимый от входящих переменных / ^* - кеш, зависимый только от экземпляра текущего модуля). Для статичных блоков рекомендуется писать ^* в самом начале шаблона.

5. Включён кеш парсинга строки данных (для функции parse_row)

А как насчёт результатов?

После оптимизации мы получили следующие цифры:
Время загрузки простого сайта - 0.17 секунды
Время загрузки среднего сайта (каталог статей, интернет-магазин) - 1 секунда
Время загрузки крупного сайта (портал недвижимости, страница со всеми объявлениями) - 5 секунд

При этом количество запросов к БД удалось уменьшить до 60-140.

Фактически систему удалось ускорить в 3 раза, при этом в 3 раза сократив кол-во запросов к БД.

Даже не смотря на такое ускорение, система ещё не подходит для разработки порталов и интернет-магазинов. Для сравнения - главная страница топовых интернет-магазинов на системе Битрикс загружается 0.5 секунды.

Сейчас Е5 прекрасно справляется с небольшими сайтами компаний, каталогами статей и блогами. Моя цель - довести скорость загрузки интернет магазина и портала до 0.3 секунды.

Стоит отметить, что с кешированием это возможно уже сейчас. Тем более, что в Е5 оно бывает очень многих видов. Например, сам разработчик модуля может установить кешируемость определённых элементов (некоторые кешируются на время, некоторые - до изменения элемента). Кроме того есть кеш SQL запросов, жёсткий кеш шаблонов (кешируется вообще всё), кеш функций и кеш структуры направляющего шаблона (то, о чём я писал в пункте 3 этого поста).

Автор: E5 Developer

Дата: 15 октября 2012



Добавить комментарий

Имя

E-mail

Комментарий

Контрольный вопрос:
Сколько будет: 19+4-8


 
Наши работы
Массажные кровати LongLife

Благотворительная организация Преображение

Автомобили из Кореи СК-МОТОРС

Мобильные бани МОБИБА

Европейские ограждения Евростандарт

Портал недвижимости Аренда 911

Сеть саун Кантри

Строительная компания Сибирский Стиль

Автомобили из Кореи СК-МОТОРС

Арбитражный суд НСО

Сервис-кухня Ланч

Ремонт и обслуживание компьютеров ПК-Сервис

Интернет-каталог велосипедов и детской мебели Дами

 

Главная О студии Расценки Портфолио Статьи Контакты