6

Ho un progetto ASP.NET MVC3 in cui la pagina principale di aspx esegue un caricamento dinamico per le sue parti utilizzando jQuery ajax. Quindi, sostanzialmente quando il sito si carica, colpisce/Home/Index e quindi all'interno della vista Index (aspx), ci sono diverse linee di jQuery che effettuano chiamate ajax (a/Home/PartOne e/Home/PartTwo per popolare parti della pagina.Come ridurre/eliminare il tempo di attesa/latenza nella richiesta AJAX

Così ogni volta che la pagina viene caricata, fondamentalmente sta facendo 3 richieste: per arrivare indice, per ottenere PartOne, e quindi PartTwo

la domanda:. Perché c'è un certo tipo di tempo "attesa" per il la terza richiesta di esecuzione? Ho pensato che questo era il limite di richiesta simultanea del browser, ma perché non è in esecuzione dopo la prima richiesta?

Quando ho sperimentato l'attributo "OutputCache" ute su "PartTwo", si comporta come previsto, che si stava eseguendo velocemente. Questo suggerisce che il problema non è in IIS, ma da qualche parte dopo e prima che colpisca il mio metodo di azione.

Ecco uno screenshot da Chrome profiler rete: Chrome network profiler

Ecco una schermata sul MvcMiniProfiler - guardare il 3 ° fila/valore, è in attesa di 500 ms prima di eseguire codice di azione del mio controller. enter image description here

Il mio codice controller è simile al seguente. Anche se mi tagliò il codice vero e proprio, ma il codice per PartTwo è molto banale (non lunga calcolo, nessuna chiamata db, ecc):

public class HomeController : Controller { 
    public ActionResult Index() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartOne() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartTwo() { 
     // do something here 
     return View(); 
    } 
} 

mio javascript:

$(document).ready(function() { 
    $.ajax({ 
     url: "/Home/PartOne", 
     cache: false, 
     success: function (data, textStatus, request) { 
      $("#TestContainerOne").html(data); 
     } 
    }); 

    $.ajax({ 
     url: "/Home/PartTwo", 
     cache: false, 
     success: function (data, textStatus, request) { 
      $("#TestContainerTwo").html(data); 
     } 
    }); 
}); 

mio index.aspx:

<h2>Home page</h2>  
<div id="TestContainerOne"></div> 
<div id="TestContainerTwo"></div> 

PartOne.ascx:

<h2>Part One</h2> 

PartTwo.ascx:

<h2>Part Two</h2> 

Aiuto?

+0

Potrebbe avere qualcosa a che fare con il numero di richieste simultanee di un browser può avere con un dominio specifico. Vedere la risposta di questa domanda: http://stackoverflow.com/questions/561046/how-many-concurrent-ajax-xmlhttprequest-requests-are-allowed-in-popular-browse – Dismissile

+0

Non credo. Perché ci sono solo 3 richieste, quindi in teoria dovrebbero essere eseguite back-to-back - quali sono. Ma il ritardo sta accadendo dal lato server. Guarda la mia nota sull'esperimento usando l'OutputCache - il che suggerisce che non è causato dalla limitazione del browser/client. –

+1

Cose da provare: a) Rilascio build con debug = "false" nel web.config (credo di aver letto da qualche parte che quando il debug è vero ci sono alcune cose che sono memorizzate nella cache), b) Prova il codice su IIS o IIS Express, poiché di solito trovo che il classico server di sviluppo sia un po 'instabile alcune volte. – Pedro

risposta

7

È necessario utilizzare lo stato di sessione di sola lettura o disattivarlo completamente per ottenere l'elaborazione parallela delle richieste Ajax. Per impostazione predefinita il server blocca lo stato della sessione per le richieste provenienti dallo stesso client, quindi le richieste vengono eseguite in sequenza.

questo è fatto da decorare il controller con l'attributo SessionState:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] 
public class HomeController : Controller { 
    public ActionResult Index() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartOne() { 
     // do something here 
     return View(); 
    } 

    public ActionResult PartTwo() { 
     // do something here 
     return View(); 
    } 
} 
+1

Ho scritto una recensione di questo problema nel mio blog: http://setiabud.blogspot.com/2012/03/session-variable-performance.html –

+0

un altro microsoft momento della faccia –

Problemi correlati