Статьи :
Оптимизация opencart 1.5
11 августа 2015, 08:00 |
Постановка задачиИмеется интернет-магазин, выполненный на opencart 1.5. У сайта наблюдается долгое время загрузки страниц, что явно говорит о том, что имеются проблемы с его производительностью. Наша задача: выявить источник проблемы и, исходя из него, провести необходимую оптимизацию сайта. ТеорияВообще говоря, на скорость загрузки страниц влияет довольно много факторов, в частности: В серверной части: - оптимизация базы (структура, индексы) - оптимальность кода (излишние циклы, избыточные массивы и так далее) - наличие кеширования В клиентской части: - минимизация траффика (сжатие изображений, яваскриптов, стилей css) - минимизация количества запросов, необходимых для загрузки страницы (склейка всех файлов js и css) - и ряд других Далее в нашей статье мы опишем работы, проведенные с серверной частью сайта ( так называемым "бэкендом" ). ПрактикаДля начала, так как "движок" опенкарта является открытым, то мы считаем, что его код более-менее оптимален по скорости работы, потому что проверен и перепроверен большим количеством людей. Поэтому данный пункт мы пропускаем. Перейдем к анализу базы. Сразу бросается в глаза очень малое количество индексов по полям таблиц (в некоторых случаях наличие индекса может многократно ускорить выборку из базы данных). Поэтому вручную проходим по всем таблицам и добавляем их на подходящие поля. Здесь пригодится простое правило: если в названии поля присутствует суффикс "_id" (например, customer_id), то это явно связка с другой таблицей, и сюда нужно добавить индекс. Например, таблица заказов "order" после оптимизации получила следующие дополнительные индексы: shipping_country_id payment_country_id shipping_zone_id payment_zone_id store_id customer_id customer_group_id order_status_id affiliate_id language_id currency_id Некоторая избыточность нам не повредит, так как база преимущественно работает в режиме чтения, а не в режиме записи (обновление индексов выполняется долго именно при записи данных). После прохода по таблицам базы перейдем к вопросу кеширования данных. Для начала нам потребуется установить модуль-профайлер – скрипт, который показывает внизу любой интересующей нас страницы сводную статистику: какие запросы к базе выполнялись, как долго, сколько памяти было использовано (инструкция по установке доступна в этой статье). Первое включение сразу же показывает серьезную проблему:
778 запросов к базе на одной странице – вот почему тормозит наш opencart! Просто немыслимо! При этом и выборка из базы идет 0.11 сек, что тоже очень и очень много. Включим в работу файловое кеширование данных. Для этого в опенкарте есть файл system/library/cache.php, в котором реализованы следующие методы: get – получить данные из кеша (если они там есть) set – записать данные в кеш На их использовании мы и выполним всю систему кеширования. Алгоритм выглядит следующим образом (на примере подсчета количества товаров):
Как видно, сначала мы сформировали ключ, и по нему проверили наличие кеша. Если кеш не обнаружен – делаем, как раньше, необходимые выборки из базы, обрабатываем данные и записываем в кеш. Для очистки устаревших данных в cache.php нами был добавлен метод clear_obsolete, который просто запускается раз в десять минут и удаляет весь накопленный кеш. Для данного вида кеширования это является наиболее подходящим решением (остальные варианты сильно усложнили бы код). После всех изменений в коде наша статистика стала выглядеть вот так:
Как видно, число запросов к базе сократилось с 778 до 17 (!!), а время – с 0.11 до 0.0016 сек. При этом не только ускорилась загрузка страниц, но и уменьшилась нагрузка на сервер, так как данные в кеше хранятся уже в обработанном виде. ВыводыВ ходе выполнения задачи мы смогли ускорить opencart за счет оптимизации серверной части – использования индексов в базе и кеширования данных, получаемых из нее. В результате уменьшилось время генерации страниц, их загрузка стала выполняться быстрее. Отдельным плюсом стало снижение нагрузки на хостинг, что позволило сохранить имеющийся тарифный план, а не переходить на более дорогой. Читайте также: производительность кеша в Opencart 1.5
Если ваш интернет-магазин на opencart также тормозит, и вы хотите заказать его оптимизацию у нас – пожалуйста, свяжитесь с нами через форму обратной связи.
|