Hogyan adjunk egy cachebuster- minden kép egy ASP.NET MVC oldalon

szavazat
0

Igyekszem, hogy javítsa teljesítményét a nagy ASP.NET MVC weboldalt, és Én jelenleg keresi a módját, hozzátéve egy gyorsítótár-semlegesítő query string fénykép kérelmeket oly módon, hogy nem kell átmenni a véleményét, és CSS és módosíthatja az egyes képek referencia.

kívánt eredményt

Annak ellenőrzésére, hogy a cachebuster- kerül ki én vagyok a Firebug kiterjesztés a Firefox és az, amit keresek, hogy valami ehhez hasonlót (screenshot vett egy másik weboldalon)

írja

Mi Megpróbáltam

A legegyszerűbb válasz tűnt számomra, hogy hozzon létre egy egyéni HTTP-modult elfogott bármilyen képet kérést, majd hozzáfűzte az gyorsítótár-semlegesítő query string a kérés URL-t. Ezért írtam az alábbi osztály

public class CacheBusterImageHandler : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += this.BeginRequest;
    }

    public void Dispose()
    {            
    }

    public void BeginRequest(object sender, EventArgs e)
    {
        // This conditional check will need to be modified to capture other image types
        // but for testing purposes it is good enough
        if (HttpContext.Current.Request.Path.EndsWith(.gif, StringComparison.OrdinalIgnoreCase))
        {
            // The version number will be generated but again for testing purposes this
            // is good enough
            var pathWithCacheBuster = string.Format({0}?v1.0.0.0, HttpContext.Current.Request.Path);

            HttpContext.Current.RewritePath(pathWithCacheBuster);
        }
    }
}

Aztán regisztrált a modult web.config mint ez

<system.webServer>
  <modules runAllManagedModulesForAllRequests=true>
    <add name=CacheBusterImageHandler type=MyAssembly.CacheBusterImageHandler preCondition=managedHandler />
    ...

Aztán ellenőrizte, hogy a kérelmet egyre feldolgozza a modul segítségével töréspont, azonban amikor megnéztem a Firebug a kép kérések nem nem rendelkezik a cachebuster- csatolt URL-t. Aztán úgy döntött, hogy olvassa el a dokumentációt az eljárás RewritePath és megállapította, hogy természetesen egyszerűen átirányít a kérést, de nem változtatja meg a kért URL-t.

Kérdések

Van egy módja egy HTTP-modul hozzáfűzni a cachebuster- a query string?

Ha nem, van-e valami más mód arra, hogy ugyanazt az eredményt elérni, anélkül, hogy módosítani minden utalás a kép?

A kérdést 10/10/2014 13:33
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

„Van egy módja egy HTTP-modul hozzáfűzni a cachebuster- a query string?”

Nem, sokkal késő ebben a folyamatban. Az URL változtatni kell, ha betette az oldalt, ez az, amit a böngésző használja, hogy ellenőrizze, ha a kép a cache-e vagy sem.

„Ha nem, van-e valami más mód arra, hogy ugyanazt az eredményt elérni anélkül, hogy módosítsa említ egy képet?”

Ez attól függ, hogyan tegye a kép URL-ek az oldalon, de nincs módja changingt ő URL-eket, hogy működik az összes utat, hogy véget URL az oldalon.

Tudod, hogy egy módszert, amely kiszámítja a verziószám / string használjon, és hozzáteszik, hogy az összes URL-eket. Így már csak, hogy a változás egyszerre, nem minden alkalommal, amikor egy kép megváltozik.

A módszer jól jönne a verziószám vagy fordításkor a szerelvény, ha azt szeretné, hogy érvénytelenítse a cache, valahányszor telepíteni az oldalhoz, vagy a frissítési időt a képfájlt.

Alapvetően:

<img src="/images/logo.png<%= ImageVersion("/images/logo.png") %>" alt="Logo">

Használata, valami ilyesmit:

public static string ImageVersion(string name) {
  FileInfo info = new FileInfo(HttpContect.Current.MapPath(name));
  int time = (int)((info.LastWriteTimeUtc - new DateTime(2000,1,1)).TotalMinutes);
  return "?v=" + time.ToString();
}
Válaszolt 10/10/2014 13:49
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more