¿No es demasiado rápido para que una página ASP.NET se descargue en 0 ms?
-
24-10-2019 - |
Pregunta
Actualmente mido el tiempo dedicado a cargar una página web desde un programa C#.
La solución de Visual Studio tiene un programa de consola y un sitio web de ASP.NET con solo una página. El sitio web está alojado en ASP.NET Development Server. La aplicación de la consola consulta la página web como esta:
bool isSuccess;
Stopwatch timeSpentToDownloadPage = Stopwatch.StartNew();
WebRequest request = HttpWebRequest.Create(new Uri("http://localhost:12345/Test.aspx", UriKind.Absolute));
request.Timeout = 200;
using (WebResponse response = request.GetResponse())
{
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream);
string responseText = sr.ReadToEnd().Trim();
isSuccess = (responseText == "Hello World");
}
timeSpentToDownloadPage.Stop();
La página web no tiene nada especial, solo una respuesta en la carga y sin código ASP.NET:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Hello World");
}
Ahora, el cronómetro muestra cada vez que el código gastaba 0 ms. Para hacer todo el trabajo (consultar el servidor, obtener la respuesta, etc.).
¿Como es posible? ¿No hay algo malo con lo que estoy haciendo? Realmente, esperaba al menos 10-20 ms. Para ejecutar todo el código del lado del cliente, luego 100 ms. a:
- Lado del cliente] Encuentre la página para consultar desde URI (que no requiere consulta DNS, por lo que es bastante rápido),
- lado del cliente] hacer la solicitud,
- Lado del servidor] Inicializar el motor ASP.NET,
- Lado del servidor] procesa la solicitud,
- Lado del servidor] Buscar y leer el archivo .px y ejecutar el código compilado (al menos el archivo de lectura puede costar varios MS.),
- Lado del servidor] Respuesta de compilación, incluidos los encabezados, luego envíela,
- Lado del cliente] Reciba la respuesta y procesa (recorte).
Entonces, ¿por qué es tan extremadamente rápido? ¿Hay un caché complicado que simplemente saltea todos/la mayoría de los pasos y devuelva el "Hello World" al cliente?
Si hay un caché "oculto", ¿dónde está y cómo puedo deshabilitarlo para medir el tiempo "real" dedicado?
Solución
¡Sí, esto puede y debe ser 0 ms! Porque su servidor está en un localhost
. Intente obtener el servidor ASP.NET en otro lugar en una red mundial.
Y no resuelve localhost porque esta es una dirección constante para 127.0.0.1
. Y la comunicación a esta dirección es operada solo por el kernel de su sistema operativo.