2010-05-26 57 views
0

我有一個web應用程序的頁面,其中有大約13個由我的應用程序生成的圖像,這是在Kohana PHP框架中編寫的。圖像實際上是圖形。它們被緩存,因此它們只生成一次,但用戶首次訪問該頁面並且必須生成圖像時,大約一半的圖像不會在瀏覽器中加載。一旦頁面被請求一次並且圖像被緩存,它們全部加載成功。試圖加載圖像的瀏覽器超時

做一些即席測試,如果我在瀏覽器中加載單個圖像,需要450-700毫秒的時間才能加載一個空的緩存(我使用Google Chrome的資源跟蹤功能進行了檢查)。作爲參考,加載緩存圖像需要大約90-150毫秒。

即使圖像緩存爲空,我也會緩存數據和某些應用程序的啓動任務,以便在第一次請求後,不需要提取任何數據。

我的問題是:

  1. 爲什麼圖像無法加載?看起來瀏覽器只是決定在某個點後不下載圖片,而不是等待它們全部完成加載。
  2. 我能做些什麼來讓他們第一次加載空的緩存?
    很明顯,一種選擇是減少加載時間,我可以通過分析應用程序來弄清楚如何做到這一點,但還有其他選擇嗎?

正如我所提到的,該應用程序位於Kohana PHP框架中,它運行在Apache上。另外,我現在通過在數據可用(即來自批處理過程)時獲取頁面來解決此問題,以便在用戶看到它們時總是緩存圖像。儘管如此,這感覺就像是一個奇怪的解決方案,我對實際上正在發生的事情感到好奇。


編輯:一個評論者要求查看請求的頭:

請求

請求URL:http://domain.com/charts/chart_name/1234/
請求方法:GET
狀態代碼:200 OK

請求頭

緩存控制:最大年齡= 0
的Referer:http://domain.com/home/chart_page
的User-Agent:Mozilla的/ 5.0(Macintosh上; U;英特爾Mac OS X 10_5_8; AppleWebKit/533.4(KHTML,如Gecko)Chrome/5.0.375.55 Safari/533。4

響應頭

緩存控制:無店,無緩存,必重新驗證,檢查後= 0,預檢查= 0
連接:保持活動
內容 - 長度:6354
內容類型:圖像/ PNG
日期:星期三,2010 5月26日21時10分45秒GMT
到期日:星期四,1981年11月19日8點52分00秒GMT
保持活動:超時= 15,最大= 94
附註:無緩存
服務器:Apache
X-已啓動通過:PHP/5.3.1

隨着圖像緩存,在響應頭的唯一區別是:

的Content-Length: 1129
Keep-Alive:timeout = 15,max = 96

我在查看內容長度的奇怪差異,因爲它應該是完全相同的內容。我意識到這在瀏覽器緩存圖像方面可能沒有優化,但一旦圖像生成一次,整個頁面加載(包括下載圖像,腳本等)大約需要1-2秒。沒有在服務器上緩存的圖像,頁面加載需要20-30s,並且幾個圖像根本無法加載。

+0

請將圖像響應頭,有和沒有緩存 – Kemo 2010-05-26 08:47:41

+0

我添加了請求的頭。感謝您提供的任何見解。 – notJim 2010-05-26 21:23:42

回答

0

在注意到文件大小的差異後,我意識到我已經錯誤地設置了Kohana的分析器,所以它在圖像的末尾輸出了一堆配置文件數據。每個請求都不是很多,但總體來說,它有很大的不同。圖像全部加載。

相關問題