Skip to content
Anton Kiyatkin edited this page Dec 11, 2016 · 18 revisions

Реализация кэшируемого окружения

Под окружением понимается набор параметров определённых для текущего посетителя сайта, например

  • язык сайта,
  • регион посетителя
  • тема сайта
  • часовой пояс
  • тема сайта.

Расширение предоставляет интерфейс для определения этих параметров без наделения их смыслом. Предполагается, что за смысл и реализацию параметров окружения отвечают другие расширения. Делать многоязычный сайт с помощью этого расширения или как-то по другому остаётся на выбор, сама возможность не обязывает в окружении сохранять всё. Целесообразность определяется тем, что для каждого набора будет создаваться отдельный кэш и на сервере и в браузере. Кэш это и причина и препятствие для хранения всего в окружении.

Также с подключением окружения у любой страницы будет канонический адрес без информации об окружении и множество адресов содержащих имя окружения.

  • /contacts - канонический
  • /samara/contacts
  • /ru/contacts
  • /3diT4/contacts

По смыслу окружение в данном понятии похоже на локаль в php.

На страницах с окружением все ссылки остаются в каноническом виде. Поисковые системы индексируют только канонические адреса сайта. Соответственно многоязычный сайт в данной реализации хоть и имеет свои адреса для отдельных языков продвигается только канонический адрес. Серверная часть канонического адреса кэшируется с помощью заголовков Etag и modified. Имя окружения попадает в Etag определяет глобальных кэш серверного ответа и также отдельные параметры из окружения или всё имя окружения попадает в остальные условия кэширования Access::cache Cache::exec.

Имя окружения

Каждому набору параметров в окружении даётся какое-то сокращённое имя. Например окружние samara может содержать в себе информацию и о регионе, и языке.

Параметры могу по разному комбинироваться имя может состоять из нескольких частей. Например, samara-en-def. Смысл и формула по которой формируется имя определяется конкретной реализацией.

Для этого есть две функции одна по набору параметров создаёт имя, другая по имени возвращает набор параметров.

Env::set($obj);
Env::get($name);

Clone this wiki locally