为什么MiniProfiler加载jquery-1.7.1,即使我已经在页面上加载了它?

gro*_*wse 7 asp.net jquery mvc-mini-profiler

我已经在ASP.NET WebForms页面上实现了StackExchange MiniProfiler,该页面已经引用了jQuery的v1.7.1.jQuery文件是本地托管的,所以我的masterfile看起来像这样:

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

但是,当我查看生成的输出源时,我得到类似的东西

<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>
Run Code Online (Sandbox Code Playgroud)

查看开发工具网络选项卡,我可以看到它将两个请求放入,一个用于Scripts/jquery-1.7.1.min.js另一个用于/app/mini-profiler-resources/jquery.1.7.1.js

这不是一个相当重要的冗余问题吗?如何阻止MiniProfiler包括请求,下载和解析jQuery库的另一个副本?

Sam*_*ron 10

原因是我们在noConflict中加载jQuery.这消除了jQuery版本冲突的风险.例如,如果页面上有jQuery版本1.0,我们不确定MiniProfiler是否仍然有效.为避免任何风险,我们加载自己的版本.

现在,我愿意,做jQuery的版本检查之前,要求它,拉请求是否"正确"的版本是有我们可以简单的别名jQueryMPjQuery.但是,这使代码变得复杂,只能解决单个版本的jQuery的问题.

  • 适用于补丁,可能是RenderIncludes(useExistingjQuery:true) - 这反过来可以生成`jQueryMP = jQuery;`而不是加载它 (3认同)
  • 感谢您的解释.是否值得在`RenderIncludes()`方法中包含一个默认的`bool = true`参数来选择加载jQuery?然后知道他们在页面上其他地方加载正确版本的用户可以调用`RenderIncludes(false)`.如果您认为这是一种可行的方法,那么很乐意做腿部工作. (2认同)