Share via


Memorizzazione nella cache dei dati in un sito di Pagine Web ASP.NET (Razor) per prestazioni migliori

di Tom FitzMacken

Questo articolo illustra come usare un helper per memorizzare nella cache le informazioni per ottenere prestazioni più veloci in un sito Web di Pagine Web ASP.NET (Razor). È possibile velocizzare il sito Web archiviando, ovvero memorizzando nella cache, i risultati dei dati che normalmente richiederebbero molto tempo per recuperare o elaborare e che non cambiano spesso.

Cosa si apprenderà:

  • Come usare la memorizzazione nella cache per migliorare la velocità di risposta del sito Web.

Queste sono le funzionalità di ASP.NET introdotte nell'articolo:

  • Helper WebCache .

Versioni software usate nell'esercitazione

  • Pagine Web ASP.NET (Razor) 3

Questa esercitazione funziona anche con Pagine Web ASP.NET 2.

Ogni volta che un utente richiede una pagina dal sito, il server Web deve eseguire alcune operazioni per soddisfare la richiesta. Per alcune pagine, il server potrebbe dover eseguire attività che richiedono (relativamente) tempo, ad esempio il recupero di dati da un database. Anche se queste attività non richiedono molto tempo in termini assoluti, se il sito sperimenta un sacco di traffico, un'intera serie di singole richieste che causano l'esecuzione del server Web l'attività complicata o lenta può aggiungere un sacco di lavoro. Ciò può influire sulle prestazioni del sito.

Un modo per migliorare le prestazioni del sito Web in circostanze come questa è memorizzare nella cache i dati. Se il sito riceve richieste ripetute per le stesse informazioni e le informazioni non devono essere modificate per ogni persona e non è tempo sensibile, invece di recuperare o ricalcolare i dati, è possibile recuperare i dati una sola volta e quindi archiviare i risultati. La volta successiva che viene inviata una richiesta per tali informazioni, è sufficiente recuperarla dalla cache.

In generale, le informazioni memorizzate nella cache non cambiano di frequente. Quando si inseriscono informazioni nella cache, le informazioni vengono archiviate in memoria nel server Web. È possibile specificare per quanto tempo deve essere memorizzato nella cache, da secondi a giorni. Alla scadenza del periodo di memorizzazione nella cache, le informazioni vengono rimosse automaticamente dalla cache.

Nota

Le voci nella cache potrebbero essere rimosse per motivi diversi da quelli scaduti. Ad esempio, il server Web potrebbe essere temporaneamente insufficiente nella memoria e un modo in cui può recuperare memoria consiste nel generare voci dalla cache. Come si vedrà, anche se sono state inserite informazioni nella cache, è necessario verificare che sia ancora presente quando necessario.

Si supponga che il sito Web abbia una pagina che visualizza la temperatura e le previsioni meteo correnti. Per ottenere questo tipo di informazioni, è possibile inviare una richiesta a un servizio esterno. Poiché queste informazioni non cambiano molto (entro un periodo di tempo di due ore, ad esempio) e poiché le chiamate esterne richiedono tempo e larghezza di banda, è un buon candidato per la memorizzazione nella cache.

Aggiunta della memorizzazione nella cache a una pagina

ASP.NET include un WebCache helper che semplifica l'aggiunta della cache al sito e l'aggiunta di dati alla cache. In questa procedura si creerà una pagina che memorizza nella cache l'ora corrente. Questo non è un esempio reale, poiché l'ora corrente è qualcosa che cambia spesso e che, inoltre, non è complesso da calcolare. Tuttavia, è un buon modo per illustrare la memorizzazione nella cache in azione.

  1. Aggiungere una nuova pagina denominata WebCache.cshtml al sito Web.

  2. Aggiungere il codice e il markup seguenti alla pagina:

    @{
        var cacheItemKey = "CachedTime";
        var cacheHit = true;
        var time = WebCache.Get(cacheItemKey);
    
        if (time == null) {
            cacheHit = false;
        }
    
        if (cacheHit == false) {
            time = @DateTime.Now;
            WebCache.Set(cacheItemKey, time, 1, false);
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>WebCache Helper Sample</title>
    </head>
    <body>
        <div>
            @if (cacheHit) {
                @:Found the time data in the cache.
            } else {
                @:Did not find the time data in the cache.
            }
        </div>
        <div>
            This page was cached at @time.
        </div>
    </body>
    </html>
    

    Quando si memorizzano nella cache i dati, questi vengono inseriti nella cache usando un nome univoco nel sito Web. In questo caso si userà una voce della cache denominata CachedTime. Questo è l'oggetto cacheItemKey illustrato nell'esempio di codice.

    Il codice legge prima la voce della CachedTime cache. Se viene restituito un valore , ovvero se la voce della cache non è Null, il codice imposta solo il valore della variabile temporale sui dati della cache.

    Tuttavia, se la voce della cache non esiste (ovvero è Null), il codice imposta il valore di ora, lo aggiunge alla cache e imposta un valore di scadenza su un minuto. Dopo un minuto, la voce della cache viene eliminata. Il valore di scadenza predefinito per un elemento nella cache è 20 minuti. Il comando WebCache.Set(cacheItemKey, time, 1, false) mostra come aggiungere il valore di ora corrente alla cache e impostarne la scadenza su 1 minuto. L'impostazione del parametro slidingExpiration su false indica che la scadenza non viene rinnovata ogni volta che viene richiesta. Scadrà esattamente 1 minuto dopo che è stato originariamente aggiunto alla cache. Se si imposta questo valore sull'ora true di scadenza di 1 minuto viene reimpostata ogni volta che il valore viene richiesto dalla cache.

    Questo codice illustra il modello da usare sempre quando si memorizzano nella cache i dati. Prima di uscire dalla cache, controllare sempre se il WebCache.Get metodo ha restituito Null. Tenere presente che la voce della cache potrebbe essere scaduta o potrebbe essere stata rimossa per qualche altro motivo, quindi qualsiasi voce specificata non è mai garantita nella cache.

  3. Eseguire WebCache.cshtml in un browser. Assicurarsi che la pagina sia selezionata nell'area di lavoro File prima di eseguirla. La prima volta che si richiede la pagina, i dati relativi all'ora non si trovano nella cache e il codice deve aggiungere il valore di ora alla cache.

    cache-1

  4. Aggiornare WebCache.cshtml nel browser. Questa volta, i dati dell'ora si trovano nella cache. Si noti che l'ora non è cambiata dall'ultima volta che è stata visualizzata la pagina.

    cache-2

  5. Attendere un minuto affinché la cache venga svuotata e quindi aggiornare la pagina. La pagina indica di nuovo che i dati dell'ora non sono stati trovati nella cache e che l'ora aggiornata viene aggiunta alla cache.

Risorse aggiuntive