2012-04-11 12 views
7

Implementé el MiniProfiler StackExchange en una página ASP.NET WebForms que ya hace referencia a la v1.7.1 de jQuery. El archivo de jQuery está alojado localmente, por lo que mi archivo maestro se ve así:¿Por qué MiniProfiler carga jquery-1.7.1 aunque ya he cargado eso en la página?

<script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> 
<%= MiniProfiler.RenderIncludes() %> 

Sin embargo, cuando veo la fuente de la salida generada, me sale algo similar a esto

<script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> 
<script type="text/javascript">  
    ... 
    load('/app/mini-profiler-resources/jquery.1.7.1.js?v=tNlJPuyuHLy/d5LQjyDuRbWKa0weCpmO3xkO6MH4TtA=', initMp); 
</script> 

Mirando en el dev pestaña de red de herramientas, puedo ver que está ingresando dos solicitudes, una para Scripts/jquery-1.7.1.min.js y otra para /app/mini-profiler-resources/jquery.1.7.1.js

¿No es esto un problema de redundancia bastante importante? ¿Cómo evito que el MiniProfiler incluya desde la solicitud, la descarga y el análisis de otra copia de la biblioteca jQuery?

Respuesta

10

La razón es que estamos cargando jQuery en noConflict. Esto elimina el riesgo de que las versiones de jQuery entren en conflicto. Por ejemplo, no estamos seguros de que MiniProfiler funcione si jQuery versión 1.0 está en la página. Para evitar cualquier riesgo, cargamos nuestra propia versión.

Ahora, estoy abierto a una solicitud de extracción que se hace una comprobación de versión de jQuery antes de solicitar que, si la versión "correcta" es simplemente no podemos alias jQueryMP a jQuery. Sin embargo, esto complica el código y solo resuelve el problema de una única versión de jQuery.

+2

Gracias por la explicación. ¿Valdría la pena incluir un argumento predeterminado 'bool = true' en el método' RenderIncludes() 'para seleccionar la carga de jQuery? Los usuarios que sabían que estaban cargando la versión correcta en otro lugar de la página podrían llamar a 'RenderIncludes (false)'. Feliz de hacer el trabajo de campo si crees que este es un enfoque viable. – growse

+3

bien por un parche, quizás RenderIncludes (useExistingjQuery: true) - esto a su vez puede generar 'jQueryMP = jQuery;' en lugar de cargarlo –

+1

En la última versión, haga esto: StackExchange.Profiling.MiniProfiler.Settings.UseExistingjQuery = true; – pbz

0

ya que tienen URL diferentes, esos son recursos diferentes para el navegador. Tal vez simplemente no necesitas el primer guión que agregaste.

o probar este truco:

<script src="/app/mini-profiler-resources/jquery.1.7.1.js?v=tNlJPuyuHLy/d5LQjyDuRbWKa0weCpmO3xkO6MH4TtA="></script> 
+0

No estoy preguntando por qué el navegador está cargando ambos scripts, estoy preguntando por qué el código autogenerado del MiniProfiler está decidiendo cargar un script que ya se ha cargado, y cómo puedo desactivarlo. – growse

+0

lea mi segunda oración: remove: Gavriel

+1

Y luego los scripts que se basan en jQuery no se ejecutarán si el MiniProfiler no está ¿Prestado? – growse

Cuestiones relacionadas