В новом проекте с большим количеством трафика мы думаем о том, как структурировать наше приложение Symfony2, чтобы использовать кеши и быть готовым к более агрессивному в будущем. Я хотел бы узнать ваше мнение.
Скажем, пользователь запрашивает страницу со списком мест. На этой странице:
- list
- common data (title, author, description)
- user data (the user likes the list + other data)
- first 20 places
- common data (title, photo of each place)
- user data (the rates of the user for those places)
HTML может выглядеть как:
<html>...
<body>
<header>
...
<!-- Embed the top user menu -->
<esi:include src="http://example.com/profile/menu" />
...
</header>
<content>
...
common data of the list
...
<!-- Embed the common data of the first 20 places, the same for everyone -->
<esi:include src="http://example.com/lists/17/places" />
...
<!-- Embed the user data of the list (used in JS) -->
<esi:include src="http://example.com/lists/17/user" />
...
<!-- Embed the user data of the list of places (used in JS) -->
<esi:include src="http://example.com/lists/17/places/user" />
...
</content>
</body>
</html>
HTML будет кэшироваться на шлюзе (Symfony или Varnish). Список мест будет кэшироваться большую часть времени на шлюзе. Запросы пользовательских данных будут теми, которые вызываются и не кэшируются (по крайней мере не изначально).
Вопросы
- Как вы относитесь к этой структуре?
- Если пользователь анонимен, могу ли я избежать использования esi-include для пользовательских данных? Также, если у меня есть cookie для пользователя anon? Как?
- Имеет ли смысл esi-include для пользовательского меню?
- Или мы должны забыть об ESI и всегда идти через контроллер (например, кэширование визуализированного представления общих данных)?
- Должны ли мы переместить 2 ESI-запроса, которые запрашивают данные пользователя, как AJAX-вызовы, а не ждать на сервере?
- Это хороший подход к масштабированию, если нам нужно сделать это быстро? Что было бы лучше?
Большое спасибо!