2012-12-29 18 views
5

Używam VirtualPathProvider, który obecnie odwzorowuje ścieżkę wirtualną do katalogu zewnętrznego względem rozwiązania. Buduję to głównie do samodzielnego ćwiczenia. Jest to całkowicie równoznaczne z twardym łączem typu soft-link lub NTFS w katalogu rozwiązania.Buforowanie zasobów statycznych zwróconych przez VirtualPathProvider

W każdym razie udało mi się załadować statyczne obrazy z tego katalogu wirtualnego przy użyciu mojego niestandardowego dostawcy.

Problem polega na tym, że przeglądarka nie buforuje obrazów. Serwer nie myśli nawet o zwrocie informacji z pamięci podręcznej (np. ETag).

Oto co zrobiłem:

  • GetFile(path).Open() powraca FileStream poprzez File.Open()
  • zrobiłem nie override GetCacheKey i GetCacheDependencies
  • zrobiłem zastąpić GetFileHash powracającego hash szmer (wydaje się być najszybszy, nawet niż CRC-32) i przetestowany to
  • Podczas debugowania, GetFileHash nie jest wywoływana w moim dostawcą

CTRL-F5 ing tylko zwraca następujące nagłówki (bez odniesienia do 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 [...] 

Jestem obecnie debugowania w Visual Studio debugowania i Firefox serwera wyposażonego w Firebug.

Jako przykład, tutaj jest to, co się spodziewałem (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 

pytanie jest oczywista: w jaki sposób mogę uzyskać przeglądarkę nie przeładować te zasoby statyczne?

+0

Czy możesz wyjaśnić swoje rozwiązanie problemu z buforowaniem? –

Odpowiedz

0

Aby buforować dane Zwykle używam webconfig w taki sposób, który jest bardzo prosty w mojej osobistej opinii:

<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> 

i muszę rozwiązać wszystkie moje problemy.

można spojrzeć tutaj http://italiancallcenter.com które wykorzystują tę samą techique lub http://annunciando.biz i można sprawdzić na swój koniec w Firebug lub chrom ....

Jedyną rzeczą, która nigdy nie zoptymalizowane są etags.

Mam nadzieję, że jest pomocny

Powiązane problemy