2012-12-29 16 views
5

Utilizzo un VirtualPathProvider che attualmente associa un percorso virtuale a una directory esterna alla soluzione. Lo sto costruendo principalmente per l'auto esercizio. Questo è totalmente equivalente ad avere un soft link o un hard-link NTFS nella directory della soluzione.Memorizzazione nella cache delle risorse statiche restituite tramite VirtualPathProvider

In ogni caso, sono riuscito a caricare le immagini statiche da quella directory virtuale utilizzando il mio provider personalizzato.

Ora il problema è che il browser non memorizza nella cache le immagini. E il server non pensa nemmeno a restituire informazioni sulla cache (come ETag).

Ecco quello che ho fatto:

  • GetFile(path).Open() rendimenti FileStream via File.Open()
  • ho fatto non esclusione GetCacheKey e GetCacheDependencies
  • ho l'override GetFileHash restituire l'hash Murmur (sembra che ci sia il più veloce, anche di CRC-32) e lo ha testato
  • Durante il debug, GetFileHash non viene richiamato nel mio fornitore

CTRL-F5 solo ing restituisce i seguenti intestazioni (nessun riferimento alla 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 [...] 

Attualmente sto debug nel server di eseguire il debug di Visual Studio e Firefox dotato di Firebug.

Come esempio, qui è quello che mi aspettavo (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 

domanda è ovvia: come posso ottenere il browser non ricaricare queste risorse statiche?

+0

Puoi spiegare la soluzione al problema della cache? –

risposta

0

per memorizzare nella cache i dati Io di solito uso webconfig in questo modo che è davvero semplice il mio consiglio personale:

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

e non ho risolto tutti i miei problemi.

si può dare un'occhiata qui http://italiancallcenter.com che utilizzano lo stesso techique o http://annunciando.biz, puoi leggere al vostro fine a Firebug o cromato ....

L'unica cosa che non ho mai ottimizzato sono i etags.

Spero che sia utile

Problemi correlati