Búsqueda de sitios web

javascript - ¿Leer variable JS en C#/¿Reenviar variable JS a la prueba de rendimiento de Visual Studio?


Las personas aquí están utilizando Visual Studio para pruebas de rendimiento. Ahora hay algunos pequeños problemas con algunas partes de JavaScript: no pueden comprobar el rendimiento de la parte de JavaScript con las pruebas de rendimiento web de Visual Studio.

Nunca he usado la prueba de rendimiento de Visual Studio, así que realmente no tengo idea de cómo medir cosas allí, pero vi que hay muchas soluciones para comprobar el rendimiento web + js. Pensé que podríamos usar otras herramientas y frameworks, pero no está permitido. La gente aquí quiere usar Visual Studio para todo. Así que esto está haciendo las cosas más complicadas.

Si tuviera que comprobar el rendimiento de JavaScript, fácilmente haría algo como esto:

var begin = new Date();
functionA();
functionB();
functionX();
var end = new Date();
var bench = end - begin;

Al final puedo ver en la variable bench mi resultado. Ahora solo tengo que pasar esta variable "de alguna manera" al test de rendimiento de Visual Studio. ¿A través de C#? ¿O cómo funciona esto? ¿Podría ser esta una buena solución? ¿Alguna otra idea?

Respuesta #1

No creo que sea posible porque el Motor de Pruebas de Rendimiento de VS no ejecuta ningún código del lado del cliente en absoluto, funciona solo a nivel HTTP. Así que el código que proporcionaste como ejemplo nunca se ejecutaría.

Mira aquí la prueba - http://msdn.microsoft.com/en-us/library/ff520100.aspx

Debido a que el Motor de Pruebas de Rendimiento Web funciona en la capa HTTP, no ejecuta scripts del lado del cliente como JavaScript o controles ActiveX. Las Pruebas de Rendimiento Web se enfocan en generar carga en un servidor. Por lo tanto, los scripts del lado del cliente que solo afectan la apariencia de una página web no son significativos para la Prueba de Rendimiento Web. Los scripts del lado del cliente que establecen valores de parámetros o provocan solicitudes HTTP adicionales, como AJAX, sí afectan la carga en el servidor y podrían requerir que modifiques manualmente la Prueba de Rendimiento Web para simular el scripting.

Un concepto erróneo común es que, debido a que la grabación ocurre en Internet Explorer, y el Visor de Resultados de Pruebas de Rendimiento Web muestra los resultados en un control de navegador, las pruebas de rendimiento web de alguna manera deben ejecutarse usando Internet Explorer. Este no es el caso. Todas las solicitudes se ejecutan directamente usando el Motor de Pruebas de Rendimiento Web; no ocurre ninguna interacción con Internet Explorer ni con ningún otro navegador. El Motor de Pruebas de Rendimiento Web se comunica directamente con el servidor web objetivo usando mensajes estándar de solicitud/respuesta HTTP.

Entonces la única forma sería utilizar otras soluciones para comprobar el rendimiento de JavaScript, o implementar la tuya propia, basada en Selenium por ejemplo. Creo que es posible automatizar tales mediciones usando Selenium RC, que se puede ejecutar desde Visual Studio como parte de una compilación (si tu requisito es usar Visual Studio para todo).

Respuesta #2

Claro, esto puede funcionar, pero no estoy seguro si puede conectarse directamente con la prueba de rendimiento de VS. Una alternativa podría ser simplemente crear la tuya propia si realmente deseas integrarte con C# y VS.

En ese caso, la pregunta llevaría a cómo conectar JS y C#. Esto se puede hacer con la plataforma .NET si incrustas tu JS en una página y luego lo ejecutas con un control WebBrowser. En tu JavaScript, puedes pasar información de vuelta a una aplicación C# haciendo referencia a window.external. Aquí hay un ejemplo en tu JavaScript:

window.external.performanceCallback([yourdata]); 

llamar al método performanceCallback() en la clase que contiene tu control WebBrowser. Sin embargo, antes de poder hacerlo, debes hacer que tu clase sea visible para la página que tu webbrowser está abriendo (window.external siendo la clase instanciada a la que estás haciendo referencia).

Entonces, para configurar window.external, cuando estás creando webBrowser en C#:

webBrowser1.ObjectForScripting = this;

Además, tienes que marcar la clase con el atributo ComVisible

[ComVisible(true)]

Como recordatorio, el WebBrowserControl depende de la versión de IE que tenga instalada en su computadora. Así que tenga cuidado con las versiones, JavaScript solo funcionará en la medida en que su versión de IE pueda manejar. Asegúrese de que su JS funcione en todas las versiones razonables de IE.