Мотивация[править]
При просмотре папок часто выводится большое количество документов на странице и вместе с документами отображаются обложки.
Так как обложек часто выводятся десятки, то раньше вывод каждой обложки приводил к запросу на сервер, который шел через PHP и Drupal и хотя эти обложки фактически кешировались в краткосрочном кеше, все равно каждое обращение нагружало и базу и процессор ненужной работой (30-100 мс процессорного времени), а также увеличивало скорость загрузки страницы, что отрицательно сказывается на трафике из поиска на папки.
Реализация[править]
Теперь появился специальный кеш в /var/cache/elis/covers, где будут храниться сгенерированные обложки. Кроме того, переведен просмотр обложек в формат webp (вместо автоматического выбора ранее из png и jpg). В случае,если обложка загружена файлом или SVG, в кеш она не попадет.
Переход на webp уменьшает трафик и ускоряет загрузку страницы, но не совместим с IE11 и старыми версиями Safari на macOS и iOS.
Важное замечание: чтобы кеш работал, необходимо в /etc/nginx/conf.d/elis.conf добавить следующие строки:
location /covers/ { root /var/cache/elis; access_log off; expires 3h; try_files $uri =404; }
Их следует добавить перед:
location / { try_files $uri @rewrite; }
После чего перезагрузить конфигурацию в веб-сервер:
# systemctl reload nginx
Если все сделано нормально, то у обложек будет теперь URL в формате /covers/{entity_type}__{entity_id}.webp (например для ноды 1234 URI будет /covers/node__1234.webp)
Открытие данного URL с обложками будет перенаправляться минуя PHP (а значит не будет проверяться доступ) в /var/cache/elis/covers;
Раз PHP не затрагивается, вы экономите примерно 30-100 мс. процессорного времени на загрузку обложки и примерно на такое же время обложка быстрее отобразится при просмотре каталога. Если обложки в папке с кешем не будет, произойдет обычный запрос обложки через PHP, а сгенерированная попадет в кеш.
Кеш с обложками чистится автоматически точно также, как и другие кеши в /var/cache/elis/*, а максимальный размер кеша обложек можно задать в admin/config/content/elis в поле ELiS cover cache max size (MB) (10Гб по умолчанию).