在一個擁有大量流量的新項目中,我們正在考慮如何構建我們的Symfony2應用程序以充分利用緩存,並準備在未來更具侵略性。我很想知道你的意見。如何使用ESI構建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的或清漆)進行緩存。大部分時間都會在網關上緩存地點列表。用戶數據請求將被調用並且不被緩存(至少不是最初)。
問題:
- 你怎麼看待這種結構?
- 如果用戶是匿名的,我可以避免爲用戶數據製作esi-includes嗎?另外,如果我有一個匿名用戶的cookie?怎麼樣?
- 用戶菜單的esi-include是否有意義?
- 或者我們應該忘記ESI並始終通過控制器(例如緩存公共數據的渲染視圖)?
- 我們應該將請求用戶數據的2個ESI請求移動到AJAX調用,而不是在服務器上等待嗎?
- 如果我們需要快速完成這是一個很好的縮放方法嗎?什麼是最好的?
非常感謝!
非常感謝barius, 我們正在代替ESI Ajax中的用戶數據請求。所以我同意你的看法。讓我們看看它是如何發展的。 關鍵&樂趣部分將與避免使用PURGE。這是能夠擴展的目標。 – fesja
分享它嘗試後的方式 –