Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Производительность и запуск

При разработке магазин настроен на удобство: ошибки на экране, шаблоны пересобираются при каждом изменении, кеш выключен. Для покупателей нужно обратное — скорость и закрытые подробности. Почти всё переключается на одной странице панели: «Расширенные параметры → Производительность».

Настройки производительности

НастройкаПри разработкеНа рабочем сервере
Режим отладкиВключёнВыключен
Компиляция шаблонов«Перекомпилировать при изменении файлов»«Никогда не перекомпилировать»
Кеш SmartyВыключенВключён
Умный кеш для CSSВыключенВключён
Умный кеш для JavaScriptВыключенВключён
Кеш данныхВыключенMemcached или другой, если есть на сервере

«Умный кеш» объединяет все файлы стилей в один и все скрипты в один — именно поэтому модуль регистрирует файлы через registerStylesheet(), а не пишет теги сам.

Режим отладки в файле

Переключатель в панели меняет константу в файле config/defines.inc.php. На рабочем сервере она должна выглядеть так:

// config/defines.inc.php
define('_PS_MODE_DEV_', false);

При false ошибки не показываются посетителям, а Symfony работает в окружении prod с кешем в var/cache/prod.

Очистка кеша

После выкладки нового кода кеш очищают:

php bin/console cache:clear --env=prod

Команда удаляет кеш Symfony: контейнер служб, маршруты, шаблоны Twig. Кнопка «Очистить кеш» на странице «Производительность» делает то же и дополнительно сбрасывает собранные шаблоны Smarty и объединённые стили и скрипты.

Что изменилиЧто очистить
services.yml, routes.yml, шаблон Twigcache:clear
Шаблон Smarty, CSS, JavaScriptКнопка «Очистить кеш»
Переопределение классаФайл var/cache/prod/class_index.php

Что замедляет модуль

ПричинаЧто делать
Запрос к базе в хуке на каждой страницеКешировать результат, выбирать только нужные колонки
Стили и скрипты на всех страницахПодключать только там, где есть блок модуля
Запрос к внешнему сервису при показе страницыВынести в команду по расписанию
Создание объекта в цикле: new Product($id)Один запрос DbQuery на весь список

Кеш шаблона в хуке

Блок, который редко меняется, можно собирать один раз. Методу fetch() передают идентификатор кеша, а данные готовят, только если кеша ещё нет:

// modules/acmehello/acmehello.php
public function hookDisplayHome(array $params): string
{
    $template = 'module:acmehello/views/templates/hook/home.tpl';
    $cacheId = $this->getCacheId('acmehello_home');
 
    if (!$this->isCached($template, $cacheId)) {
        $this->context->smarty->assign([
            'greeting' => Configuration::get('ACMEHELLO_GREETING'),
        ]);
    }
 
    return $this->fetch($template, $cacheId);
}

При включённом кеше Smarty блок приветствия собирается один раз и дальше отдаётся готовым. Когда настройку меняют на странице модуля, кеш сбрасывают вызовом $this->_clearCache($template) после сохранения.

Перед запуском

Что проверитьЗачем
Папка install удаленаИначе магазин можно переустановить
Папка панели имеет случайное имяАдрес /admin перебирают боты
_PS_MODE_DEV_ равно falseОшибки и пути не видны посетителям
HTTPS включён на всех страницах«Параметры магазина → Общие»
Дружественные адреса включены«Параметры магазина → Трафик и SEO»
Почта отправляетсяТестовое письмо на странице «E-mail»
Тестовые заказы и покупатели удаленыЧистая статистика
Права на запись только там, где нужноvar, img, upload, download, translations
Резервная копия базы и файлов по расписаниюВосстановление после сбоя
Режим обслуживания выключен«Параметры магазина → Общие → Обслуживание»

Перенос на сервер

Файлы копируют на сервер, базу переносят дампом. После переноса правят три вещи: параметры базы в app/config/parameters.php, домен в панели на странице «Трафик и SEO» в блоке «URL магазина» и очищают кеш.

Обновление магазина

Ядро обновляют модулем обновления от PrestaShop — он ставится из панели, — предварительно сделав копию файлов и базы. Сначала обновление проверяют на копии магазина. Свои модули и дочерняя тема при обновлении не затрагиваются — если вы не правили ядро.

Частая ошибка

Код выложили на сервер, а магазин работает по-старому или падает с ошибкой о неизвестной службе. В окружении prod контейнер и маршруты не пересобираются сами. Очистку кеша включают в порядок выкладки: скопировали файлы — выполнили cache:clear --env=prod — проверили главную страницу и панель.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.