2010-10-29 61 views
3

我正在做這樣的事情:如果圖像緩存在用戶的計算機上,並且其時間戳與服務器上的時間戳相同,則顯示緩存版本;否則,請勿從服務器加載圖像。是否有可能知道文件是否在用戶的瀏覽器緩存中?

我想也許JavaScript可以做到這一點,所以我把這篇文章標記爲javascript。如果不合適,請幫我重新標記它。

編輯:在這裏我給出了我要實施的更多細節。我正在研究類似基於Web的文件資源管理器,只有當用戶單擊每個圖像旁邊的「查看縮略圖」按鈕時,纔會加載縮略圖。如果縮略圖已被緩存,請使用緩存版本;否則,顯示一個通用圖像圖標。

回答

0

瀏覽器可以發送「If-Modified-Since」和「ETag」標頭以向服務器表明它具有資源版本。檢查W3 caching rules關於這些標題。

您可以查詢服務器上的這些標頭,如果未找到,則發回通用圖標,如果找到,則返回「304未修改」響應。

0

這不是你必須擔心的。瀏覽器會自動爲您執行此操作。您必須確保服務器正在發送正確的標題。它有助於對文件進行適當的緩存設置,以避免額外的HEAD請求。

+0

我認爲通常如果文件不在瀏覽器緩存中,它將從服務器加載。這不是我想要的。我想阻止下載。 – Ethan 2010-10-29 06:21:50

+0

我需要在閱讀技巧上工作,對此感到抱歉。 – 2010-10-29 06:24:54

+1

您可能可以通過Cookie獲得類似的結果。如果你在每個圖像上傳遞一個獨特的cookie,那麼會有一些具體的檢查。 – 2010-10-29 06:28:35

0

難道你不能在服務器上移動/刪除/重命名它嗎?然後使用javascript Image.onError處理損壞的圖像以隱藏沒有緩存圖像的人員的破碎圖像標記。

我認爲這將顯示緩存版本的那些誰在他們的broswer chache中。其他人不會選擇任何東西

+0

感謝您的想法,但這不是我的項目的方式。剛剛編輯了這篇文章,並提供了我將要實施的更多細節。 – Ethan 2010-10-29 06:55:06

1

這對我來說似乎有點奇怪。

您將您的功能描述爲顯示文件列表併爲用戶提供單擊「查看縮略圖」的選項。這意味着如果用戶專門請求圖像,它只會嘗試從服務器加載圖像 - 因此您已經停止了大量圖像的大量加載的可能性。

因此,如果圖像不在我的瀏覽器緩存中,那麼在我第一次訪問時沒有任何圖像,那麼我將獲得通用圖像圖標。在我的下一次訪問中,圖像仍然不在我的緩存中,因此我將再次獲取通用圖像圖標。那麼,除了通用圖像圖標之外,我將如何看到任何東西?

現在轉到一個我承認不符合您的要求的解決方案,但這是此類軟件的典型實現。

  1. 顯示有「顯示縮略圖」選項
  2. 當「顯示縮略圖」選項被選中的文件,加載從服務器(注意縮略圖往往腳本將成爲一個調整大小的圖像,這可能也可以存儲在服務器上,以避免再次處理大小調整爲一定的時間)
  3. 瀏覽器會自動緩存圖像,並防止進一步的服務器請求的時間
+0

你明白了!我只是想讓它變得更聰明,如果縮略圖在緩存中,「視圖縮略圖」按鈕將不會顯示(用javascript移除) – Ethan 2010-10-29 07:35:16

+0

@Ehan - 正如你所解釋的,如果圖像被緩存,它會顯示。如果它沒有被緩存,它將顯示一個通用圖像。聽起來像你可以寫一些邏輯,說如果(generic_image可見)hide_view_thumbnail ...對嗎? – 2010-10-29 08:09:34

+0

@ Flash84x - 我想寫一些邏輯,說'如果(image_thumbnail在緩存中){generic_image.replaceWith(image_thumbnail); view_thumbnail_button.hide(); }'。因此,我想知道如果JavaScript可以確定文件是否緩存。 – Ethan 2010-10-29 08:58:59

1

我的RSS閱讀器,包含大量帖子的Feed,加載完整帖子。條目的數量取決於實際窗口的大小。當我滾動到列表的底部時,如果有更多的帖子,它會加載另一個頁面。

是否適用於您的文件資源管理器?這意味着用戶總是會加載20個縮略圖,但除非必要,否則不會再有。我從來沒有使用文件瀏覽器,需要我點擊查看縮略圖。

+0

聽起來像一個很好的解決方案!我會決定明天走的路。 – Ethan 2010-10-29 08:55:09

相關問題