在一个流量很大的新项目中,我们正在考虑如何构建我们的 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-includes 吗?另外,如果我有匿名用户的 cookie?如何?
- 用户菜单的 esi-include 是否有意义?
- 还是我们应该忘记 ESI 并始终通过控制器(例如缓存公共数据的渲染视图)?
- 我们是否应该将要求用户数据的 2 个 ESI 请求移动为 AJAX 调用,而不是在服务器上等待?
- 如果我们需要快速扩展,这是一种很好的扩展方法吗?什么是最好的?
多谢!