2011-11-29 62 views
1

我有幾個場景,我最終需要在幾個月時間內考慮這些場景。只是把問題放在那裏,以便我可以同時討論討論。使用Varnish/ESI和Zend Framework進行緩存和頁面瀏覽

我爲我的應用程序堆棧使用Zend Framework。我正在使用APC進行服務器緩存(而不是memcache,因爲我不認爲即使我的應用程序已分發,memcache也會爲我提供任何好處)。

我的應用程序已經構建成無JavaScript工作,然後用於JavaScript支持我將頁面分解並呈現適合JavaScript的版本。

如果你分析一個簡單的頁面,也許它的80%是核心功能,可以爲每個用戶緩存。然後,20%是爲該用戶定製的。例如,我可能想顯示

  • 最後5瀏覽過的商品
  • 收藏最多的項目

這兩個「小部件」將是針對每個用戶。我正在考慮對這些組件使用ESI,但後來我發現任何/我的Zend Framework應用程序最消費的方面是引導和分派過程。所以如果我的應用程序目前需要80毫秒而沒有緩存。像90%的相對時間花費在bootstrap和Plugin鉤子上,如果我使用ESI來加載這兩個「小部件」,那麼我會有效地爲每個頁面添加負載?因爲我會爲每個緩存頁面啓動另一個80ms請求。

在這種情況下,您是否建議通過JavaScript加載自定義的小部件/片段,在初始頁面加載後可以將其拖動。這樣做的明顯好處是,只有一個請求被緩存,然後在初始頁面(被緩存)提供之後,在單個請求中提取任何自定義的請求。

如果我正在尋找最佳性能,這似乎是更好的解決方案?

回答

0

光油與ESI不會幫助你減少網頁加載時間,知道80毫秒已經是不錯的(人類用戶不會使1和500毫秒之間的任何差別......)

這將幫助你避免服務器對重負載的壓力,這與ESI和AJAX一樣。

如果您的優先級是儘可能快地顯示主頁面,那麼AJAX是最好的方式,因爲ESI在發送整個頁面之前會等待子請求進行響應。

如果您仍然希望您的應用程序是不兼容的JS,你可以過濾過濾器的用戶代理如果可能的話ESI如果不使用JS但這種伎倆的是easyly髒...

1

你可以建立第二個簡單的應用程序,它基於ajax調用從緩存中讀取數據,如果信息沒有被緩存,則只使用引導程序。該響應可以添加到緩存中,以便進一步調用不會加載您的zend項目。這是一個正常的程序,但也需要對緩存失效進行編程。你已經在使用適合這個的apc。顯然它不適用於最近5次瀏覽或類似的內容。