2012-12-29 24 views
5

Tôi đang sử dụng VirtualPathProvider hiện đang ánh xạ đường dẫn ảo đến thư mục bên ngoài giải pháp. Tôi đang xây dựng chủ yếu để tự luyện tập. Điều này hoàn toàn tương đương với một liên kết mềm hoặc liên kết cứng NTFS trong thư mục của giải pháp.Tài nguyên tĩnh lưu vào bộ nhớ cache được trả lại qua VirtualPathProvider

Dù sao, tôi đã quản lý thành công tải hình ảnh tĩnh từ thư mục ảo đó bằng cách sử dụng nhà cung cấp tùy chỉnh của tôi.

Bây giờ vấn đề là trình duyệt sẽ không lưu hình ảnh. Và máy chủ thậm chí không nghĩ đến việc trả về thông tin bộ nhớ cache (như ETag).

Đây là những gì tôi đã thực hiện:

  • GetFile(path).Open() lợi nhuận FileStream qua File.Open()
  • tôi đã làm không override GetCacheKeyGetCacheDependencies
  • tôi đã ghi đè GetFileHash trả lại băm Murmur (có vẻ là nhanh nhất, thậm chí là CRC-32) và đã thử nghiệm nó
  • Khi gỡ lỗi,.210 là không bao giờ gọi ở nhà cung cấp của tôi

CTRL-F5 chỉ ing trả về tiêu đề sau (không đề cập đến bộ nhớ cache)

Cache-Control private 
Content-Length 476 
Content-Type image/png 
Date Sat, 29 Dec 2012 21:25:54 GMT 
Server Microsoft-IIS/8.0 
X-AspNet-Version 4.0.30319 
X-Powered-By ASP.NET 
X-SourceFiles [...] 

Tôi hiện đang gỡ lỗi trong máy chủ debug của Visual Studio và Firefox được trang bị với Firebug.

Như một ví dụ, đây là những gì tôi mong đợi (http://i.stack.imgur.com/3mn3d.png)

Accept-Ranges bytes 
Cache-Control max-age=315360000 
Content-Length 1059 
Content-Type image/png 
Date Sat, 29 Dec 2012 21:35:29 GMT 
Etag "7d636a8ef932ed081c16ace6f87b16e6" 
Expires Fri, 12 Feb 2038 09:58:39 GMT 
Last-Modified Tue, 14 Feb 2012 22:07:18 GMT 
Server ECAcc (fcn/4089) 
X-Cache HIT 

Câu hỏi là rõ ràng: làm thế nào tôi có thể nhận được các trình duyệt không để tải lại các tài nguyên tĩnh này?

+0

Bạn có thể giải thích giải pháp của mình cho vấn đề lưu vào bộ nhớ đệm không? –

Trả lời

0

Để bộ nhớ cache dữ liệu tôi thường sử dụng webconfig theo cách này đó là thực sự đơn giản tại tư vấn cá nhân của tôi:

<system.webServer> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="180.00:00:00" /> 
    </staticContent> 
    <caching> 
    <profiles> 
    <add extension=".ico" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".htm" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".pdf" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".bmp" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".jpeg" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".png" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".gif" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".js" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".css" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    <add extension=".jpg" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> 
    </profiles> 
    </caching> 
    </system.webServer> 

Và tôi đã giải quyết tất cả các vấn đề của tôi.

bạn có thể có một cái nhìn ở đây http://italiancallcenter.com mà sử dụng cùng một techique hoặc http://annunciando.biz và bạn có thể kiểm tra ở cuối của bạn trong firebug hoặc chrome ....

Điều duy nhất mà tôi không bao giờ được tối ưu hóa là etags.

Tôi hy vọng đó là hữu ích

Các vấn đề liên quan