Публичное веб-приложение должно индексироваться поисковыми системами, которым очень важны следующие показатели:
Поэтому, предварительное создание/обновление/удаление документом видится разумным решением.
Представление публичного веб-приложение глобально можно разделить на 2 вида:
Самый простой способ понять вид представления - проверять признак аутентификации, например:
Если приложение имеет большой трафик для неаутентифицированного пользователя, то документы приложения лучше создавать предварительно (до того, как клиент запросит такой документ).
В предварительной обработке представления для неаутентифицированного пользователя можно выделить 2 роли:
Т.к. поисковые роботы при индексировании используют только GET-запросы, то условно документы для неаутентифицированного пользователя, можно разделить на 2 типа:
Заметки:

Частичное кэширование можно реализовать с помощью инструмента Varnish + ESI-блоков, коротко принцип работы:

Сначала пользователь посылает запрос на получение ресурса. Если в теле ответа содержатся специальные теги <esi:include src="/..." />, кэширующий сервер запрашивает бэкенд для получения дополнительных блоков контента.
Varnish представляет собой кеширующий “обратный” (reverse) прокси-сервер и акселератор HTTP. Принцип его работы: получает запрос, обрабатывает его и сразу выдает ответ если он присутствует в кэше, если нет то обращается к веб-серверу за результатом. Ответ помещается в кэш. Многопоточность реализована с помощью стандартных потоков POSIX, их количество регулируется. Это одна из причин почему Varnish не очень хорошо работает в Windows. Каждый запрос обрабатывается в отдельном потоке. Причем с версии 4.0 за получение запроса от пользователя и передача запроса серверу отвечают разные потоки, что еще более повысило производительность. Varnish поддерживает технологию ESI (Edge Side Includes) позволяющую разбивать веб-страницу на части и запрашивать их отдельно. Кэш может хранить любую информацию. В итоге Varnish отлично подходит для кэширования динамического контента.
Для хранения данных (кэша, журналов операций) используется виртуальная память, управлением того что выгружается на диск занимается ОС. Здесь авторы Varnish справедливо считают, что разработчики ОС свое дело знают, а дублирование только ухудшает производительность.
Реализации ESI сильно различаются от одного ПО к другому, вот сравнение:
| Software | Includes | Vars | Cookies | Upstream Headers Required | Host Whitelist |
|---|---|---|---|---|---|
| Squid3 | Yes | Yes | Yes | Yes | No |
| Varnish Cache | Yes | No | No | Yes | Yes |
| Fastly | Yes | No | No | No | Yes |
| Akamai ESI Test Server (ETS) | Yes | Yes | Yes | No | No |
| NodeJS’ esi | Yes | Yes | Yes | No | No |
| NodeJS’ nodesi | Yes | No | No | No | Optional |
Столбцы таблицы описываются следующим образом:
<esi:includes> , реализован ли операнд в механизме ESI.<esi:vars> , реализован ли операнд в механизме ESI.Подробное сравнение рассматривается тут (pdf)
В отличие от Squid который изначально больше ориентировался на кэширование клиентских запросов, Varnish был разработан и оптимизирован именно в качестве ускорителя HTTP и ничего другого больше не умеет. Мы не найдем здесь поддержку остальных протоколов (FTP, SMTP и прочие), не увидим возможности прямого прокси — кэширования веб-страниц для экономии внешнего трафика (Varnish «привязывается» к бэкэндам). Естественно отличается и возможности по конфигурированию.
Язык конфигурации Varnish Configuration Language (VCL) — динамический, скрипт сам по себе по сути является отдельным плагином. Код транслируется в С (можно сразу писать встраиваемый код на С), после чего инструкции компилируются в библиотеку и подгружаются в память. Можно вносить изменения в конфигурацию «на лету». Инструкции в VCL позволяют: кэшировать только определенные запросы, снижая нагрузку при генерации динамических объектов, блокировать доступ к определенным каталогам и скриптам, подменять заголовки и многое другое. Есть и механизм проверки работоспособности бэкендов (замер времени ответа, счетчик неудачных проверок и т.д.), возможность перезаписи и перенаправления (rewrite) запросов. Вообще такой подход позволяет производить с HTTP трафиком практически любые манипуляции, которые можно ограничить только собственным воображением. Поддерживается балансировка нагрузки несколько алгоритмов (round robin, random и DNS, Client IP). Возможности расширяются при помощи модулей, называемых VMOD (Varnish MODules). Проект предоставляет необходимую документацию позволяющих написать такой модуль самостоятельно. Часть модулей (varnish-cache.org/vmods) уже включены в стандартную поставку, некоторые доступны в виде концепта или находятся в разработке.
Rendering
Performance
Заметка: нельзя полагаться на то, что клиент будет что-то кэшировать, поэтому нет особого смысла использовать HTTP-заголовки кэширования