Share via


Configurare la memorizzazione nella cache dell'output di IIS 7

di Tali Smith

Internet Information Services (IIS) include una funzionalità della cache di output in grado di memorizzare nella cache il contenuto PHP dinamico (o l'output di Microsoft® ASP.NET o ASP classico o altre pagine dinamiche) in memoria. Ciò può produrre enormi miglioramenti delle prestazioni, poiché lo script usato per generare l'output dinamico non deve essere eseguito per ogni richiesta. La cache può variare l'output memorizzato nella cache in base ai valori della stringa di query e alle intestazioni HTTP inviate dal client al server. La cache è integrata anche con il driver in modalità kernel Http.sys, migliorando le prestazioni.

Quando usare la memorizzazione nella cache di output

Il contenuto Web può essere suddiviso in due categorie principali: contenuto statico e contenuto dinamico.

  • Il contenuto statico non cambia da richiesta a richiesta. Il contenuto restituito al Web browser è sempre lo stesso. Esempi di contenuto statico includono file HTML, JPG o GIF.
  • Il contenuto dinamico è l'output che cambia con ogni richiesta. Gli esempi includono ASP.NET o il contenuto PHP.

Tra queste due categorie è contenuto semi-dinamico. Si immagini una pagina ASP.NET dinamica che esegue una query di database. Non esiste alcun motivo per eseguire questa query su ogni richiesta se le tabelle di database sottostanti cambiano raramente.

IIS memorizza automaticamente nella cache il contenuto statico (ad esempio pagine HTML, immagini e fogli di stile), poiché questi tipi di contenuto non cambiano dalla richiesta alla richiesta. IIS rileva anche le modifiche apportate ai file quando si apportano aggiornamenti e IIS scarica la cache in base alle esigenze.

La funzionalità di memorizzazione nella cache dell'output IIS è destinata al contenuto semi-dinamico. Consente di memorizzare nella cache le risposte statiche per le richieste dinamiche e aumentare la scalabilità.

Si noti che non tutte le pagine dinamiche possono sfruttare la cache di output. Le pagine altamente personalizzate (ad esempio il carrello acquisti o le transazioni di e-commerce) non sono buoni candidati perché è probabile che l'output dinamico non venga richiesto ripetutamente e la memoria usata per memorizzare nella cache il contenuto verrebbe sprecato. Anche il contenuto restituito come risultato di una richiesta di tipo POST a un modulo HTML non è memorizzabile nella cache.

I candidati migliori per la cache di output sono pagine che generano dati in modo dinamico, ma non sono probabilmente cambiate dalla richiesta alla richiesta in base all'URL o alle informazioni sull'intestazione. Ad esempio, le applicazioni di tipo raccolta foto che ridimensionano dinamicamente le immagini per la visualizzazione in una pagina Web sono ottimi candidati per la cache di output perché la memorizzazione nella cache dei dati salva il server dalla necessità di rielaborare il ridimensionamento dell'immagine per ogni richiesta. Un altro buon esempio di un tipo di applicazione che può sfruttare la funzionalità della cache di output è un'applicazione ticker stock.

Selezionare criteri di cache

IIS supporta due tipi di criteri di cache:

  • varyByQuerystring, in cui l'URL è lo stesso, ma il valore della stringa di query varia.
  • varybyHeaders, che può variare la cache in base alle intestazioni HTTP inviate dal client al server.

Invalidare la cache

Con il contenuto dinamico, i dati possono cambiare di frequente ed è necessario svuotare la cache, consentendo il recupero e la reinserimento dei nuovi dati. Si noti che anche se i dati cambiano di frequente come ogni secondo, può comunque essere utile memorizzare nella cache i dati; un sito può ottenere centinaia di richieste al secondo o più e la memorizzazione nella cache può ridurre i viaggi al database per recuperare i dati, salvare il server Web e il server di database da lavoro aggiuntivo.

IIS supporta due modi per invalidare il contenuto dinamico:

  • Usare un periodo di timeout semplice: la proprietà di configurazione è CacheForTimePeriod.
  • Rilevare una modifica alla risorsa sottostante. La proprietà di configurazione è CacheUntilChange. Usare questo tipo di schema di invalidazione solo quando si desidera scaricare la cache quando la risorsa sottostante cambia.

Configurare la validità della cache

Anche se si abilita la memorizzazione nella cache dell'output, IIS non memorizza immediatamente nella cache una richiesta. È necessario richiedere alcune volte prima che IIS consideri "degna di cache" una richiesta. La validità della cache può essere configurata tramite la sezione ServerRuntime descritta nell'articolo Classe ServerRuntimeSection.

Due proprietà determinano la validità della cache:

  • frequentHitTimePeriod
  • frequentHitThreshold

Una richiesta viene memorizzata nella cache solo se più richieste <frequentHitThreshold> di un URL memorizzabile nella cache arrivano all'interno di <frequentHitTimePeriod>. L'impostazione predefinita per frequentHitTimePeriod è 10 secondi. L'impostazione predefinita per frequentHitThreshold è 2 riscontri.

Configurare la memorizzazione nella cache dell'output tramite Gestione IIS

La cache è abbastanza semplice da configurare usando la funzionalità dell'interfaccia utente nel nuovo strumento di amministrazione iis.

  1. Scegliere Strumenti Amministrazione strative dal menu Start e quindi fare clic su Gestione Internet Information Services (IIS).

  2. Nella visualizzazione albero a sinistra trovare l'applicazione.

  3. Selezionare la voce di menu Memorizzazione nella cache dell'output.

  4. Nella colonna a destra fare clic su Aggiungi nel menu Azione . È possibile aggiungere la regola di memorizzazione nella cache dell'output qui.

  5. Nel campo Estensione nome file, ad esempio, digitare .php e quindi selezionare Memorizzazione nella cache in modalità utente.

  6. Fare clic su Avanzate e quindi selezionare la casella di controllo Variabili stringa di query.

  7. Immettere le variabili appropriate nella casella di testo Variabili stringa query .

    Screenshot della finestra di dialogo Aggiungi regola cache, la pagina Memorizzazione nella cache di output e la regola cache di output avanzata Impostazioni.

    Figura 1: Esempio di memorizzazione nella cache di output

Configurare la memorizzazione nella cache dell'output tramite il file Web.config

È anche possibile configurare la funzionalità di memorizzazione nella cache nel file Web.config locale, disponibile nella directory del contenuto. Di seguito è riportato un esempio della configurazione necessaria per una pagina ShowStockPrice.asp con un parametro varyByQueryString di * (ovvero memorizzare nella cache tutte le varianti univoche dei parametri di querystring) e un timeout di 1 secondo.

<configuration> 
     <location path="showStockPrice.asp">     
       <system.webserver>        
         <caching>         
           <profiles>
             <add varybyquerystring="*"location="Any"
               duration="00:00:01" policy="CacheForTimePeriod"            
               extension=".asp">
           </profiles>
         </caching>
       </system.webserver>
     </location>
</configuration>

Se si desidera memorizzare nella cache questi dati nel kernel per ottenere prestazioni ancora più veloci, è sufficiente modificare l'attributo dei criteri in kernelCachePolicy.

Nota

Microsoft ASP.NET include già una funzionalità della cache di output; La funzionalità cache di output IIS funziona in parallelo con la cache ASP.NET e funziona per tutti i tipi di applicazioni.

Controllare i contatori delle prestazioni

Per visualizzare le prestazioni nella cache di output, è possibile esaminare i contatori della cache di output nel monitoraggio delle prestazioni e dell'affidabilità.

  1. Scegliere Strumenti Amministrazione istrative dal menu Start e quindi fare clic su Affidabilità e Monitor prestazioni. In Windows Vista® o Windows® 7, Amministrazione istrative Tools è disponibile nella Pannello di controllo.
  2. Selezionare Monitor prestazioni nella visualizzazione albero a destra e quindi fare clic + sulla barra degli strumenti.
  3. Passare al contatore cache del servizio Web e quindi fare clic su di esso per aprirlo.
  4. Aggiungere il contatore Totale URI memorizzati nella cache.

Se si esegue un test delle prestazioni, si noterà che il numero di URI memorizzati nella cache aumenta con il numero se si richiedono elementi.

Usare la memorizzazione nella cache in modalità kernel

La cache di output iis supporta due criteri di cache:

  • Criteri di cache di output in modalità utente, che usano una cache che risiede in un processo di lavoro IIS.
  • Criteri di cache in modalità kernel, che usano una cache che risiede in Http.sys, un driver in modalità kernel.

La memorizzazione nella cache del contenuto in modalità kernel consente di velocizzare le prestazioni del sito Web. Un esempio di utilizzo della memorizzazione nella cache in modalità kernel è disponibile nell'articolo Memorizzazione nella cache dell'output IIS.

Si noti che esistono due differenze significative tra la cache di output in modalità utente e quella in modalità kernel.

  • La cache di output in modalità kernel non supporta moduli e funzionalità che devono essere eseguiti in modalità utente, ad esempio l'autenticazione o l'autorizzazione. Ad esempio, se gli schemi di autenticazione come l'autenticazione di base o l'autenticazione di Windows® sono abilitati, i criteri della cache non funzionano. Il contenuto viene fornito ma non memorizzato nella cache. Per altre informazioni sui motivi per cui le risposte potrebbero non essere memorizzate nella cache in modalità kernel, vedere questo articolo della Knowledge Base.
  • La cache di output in modalità kernel supporta l'attributo varyByHeaders, ma non varyByQuerystring.

Risolvere i problemi di memorizzazione nella cache

Buffering eventi richiesta non riuscita (FREB) è il modo migliore per scoprire se la richiesta viene memorizzata nella cache; è anche possibile scoprire perché una richiesta non viene memorizzata nella cache. Ad esempio, l'evento HTTPSYS_CACHEABLE in un log FREB può indicare che una richiesta non viene memorizzata nella cache perché la cache in modalità kernel non è abilitata.

Il comando seguente può essere usato per individuare il contenuto memorizzato nella cache in modalità kernel:

netsh http show cachestate

È possibile impostare la cache di output per memorizzare nella cache solo la pagina predefinita (la pagina richiesta più di frequente):

  1. Creare un file denominato default.aspx nella directory %systemdrive%\inetpub\wwwroot\<your application> e aggiungere il codice seguente:

    <%=DateTime.Now%>
    
  2. Scegliere Strumenti Amministrazione strative dal menu Start e quindi fare clic su Gestione Internet Information Services (IIS).

  3. Usare la visualizzazione albero sul lato sinistro per passare all'applicazione.

  4. Fare clic su Visualizzazione contenuto nella parte inferiore della pagina.

  5. Selezionare il documento predefinito, ad esempio Default.aspx pagina.

  6. Nel menu Azioni a destra fare clic su Passa alla visualizzazione funzionalità. Ogni impostazione configurata viene ora applicata solo al documento predefinito.

  7. Aprire l'impostazione Regole di memorizzazione nella cache dell'output.

  8. Aggiungere .aspx come estensione di file.

  9. Selezionare Memorizzazione nella cache in modalità kernel, selezionare A intervalli di tempo, abilitare Monitoraggio file memorizzati nella cache e quindi digitare un intervallo di tempo, ad esempio 00:00:30.

  10. Passare a http://localhost//<your application> con Windows® Internet Explorer®. Aggiornando costantemente la pagina (premere CTRL+F5 per assicurarsi di non usare la cache del browser), si noterà che il tempo non cambia per 30 secondi.

Nota

Questo articolo si basa sulle informazioni contenute nell'articolo "Iis 7 Output Caching for Dynamic Content - Speed Up Your ASP and PHP Applications" di Bill Staples, pubblicato il 2 maggio 2007.

Vedi anche