2012-03-22 11 views
20

Tengo una sola página de la aplicación javascript (hecha con JavascriptMvc) y un backend con servicios REST construidos sobre ASP.NET MVC3 (hecho con NServiceMVC).¿Cómo uso MiniProfiler con una aplicación web de una sola página/backend REST?

Los servicios REST tienen MiniProfiler instalado y ejecutándose, y los encabezados X-MiniProfiler-Ids vuelven con cada solicitud AJAX. De hecho, tengo miniprofiler en funcionamiento y funcionando, pero no pude encontrar ninguna información sobre esto, por lo que no estoy seguro si lo estoy haciendo de la manera correcta.

¿Es este un escenario admitido, y hay una forma específica de hacer esto ahora?


Lo que estoy haciendo actualmente es la siguiente:

En la aplicación HTML (que es todo el código estático, no hay cosas dinámico), que tengo:

<script type="text/javascript" src="/api/profiler"></script> 

En mi MVC aplicación, tengo:

public ActionResult Profiler() 
    { 
     if (!ControllerContext.HttpContext.IsDebuggingEnabled) 
     { 
      return new EmptyResult(); 
     } 
     return new ContentResult() { 
      Content = StackExchange.Profiling.MiniProfiler.RenderIncludes(
         position: RenderPosition.Right, 
         showControls: true 
        ) 
         .ToString() 
         .Replace("<script type=\"text/javascript\">", "") 
         .Replace("</script>", "") 
     }; 
    } 

Claramente, hay un truco aquí que se deben eliminar los codificados <script> etiquetas.

Aparte de esto, desde el resto del lado de MVC, Profiler se usa exactamente igual que de costumbre. Cuando realiza una acción en la aplicación que provoca una llamada REST, miniprofiler aparece en la esquina. Usar el parámetro showControls:true es muy útil aquí también, así que aparece el botón borrar, porque de lo contrario solo obtendrás una lista constante de acciones ya que la página entera esencialmente nunca se actualiza.

¿Es esta la forma "correcta" de hacer esto, o hay una manera mejor?

+0

Para que quede claro: su solución funciona, pero ¿desea confirmación de que ha seguido las mejores prácticas? –

+0

@KirkWoll Sí. Debido a que no hay mucha documentación sobre el generador de perfiles, quiero saber si estoy pasando por alto una solución existente. En el peor de los casos, esta pregunta puede proporcionar cierta documentación para futuras búsquedas web. Si esta es la "mejor" forma, probablemente enviaré un parche para no tener que hacer mi '.replace()' hackear y hacer que este sea el verdadero modo "oficial". – gregmac

+0

Tengo la misma pregunta. ¿Sigues haciéndolo de esta manera? – Jerry

Respuesta

1

Hay una suposición en su código que @ MiniProfiler.RenderIncludes() genera todo su contenido mediante javascript. Si bien eso puede ser una suposición válida en el momento actual, esto podría cambiar.

¿Por qué no simplemente evitar los ataques por completo y utilizar una solicitud de ajax para cargar el generador de perfiles? En cualquier escenario, ya sea ajax o script incrustado, el acto de insertar el perfilador a través de una devolución de llamada afectará un poco el resultado del perfilado.

<div id="profiler"></div> 
<script type="text/javascript"> 
    $.load("#profiler","api/profiler"); 
</script> 
Cuestiones relacionadas