2012-04-11 54 views
7

我已經在已經引用了jQuery的v1.7.1的ASP.NET WebForms頁面上實現了StackExchange MiniProfiler。 jQuery的文件在本地託管,所以我的主文件看起來是這樣的:爲什麼MiniProfiler會加載jquery-1.7.1,即使我已經在頁面上加載了它?

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

然而,當我查看生成的輸出源,我得到類似這樣

<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> 

東西展望dev的工具網絡選項卡上,我可以看到,它的投入兩個要求,一個是Scripts/jquery-1.7.1.min.js,另一個用於/app/mini-profiler-resources/jquery.1.7.1.js

難道這不是一個相當大的冗餘問題?如何阻止MiniProfiler包含請求,下載和解析jQuery庫的另一個副本?

回答

10

的原因是,我們正在加載的jQuery在noConflict。這消除了jQuery版本衝突的風險。例如,如果jQuery版本1.0在頁面上,我們不確定MiniProfiler會繼續工作。爲了避免任何風險,我們加載我們自己的版本。

現在,我願意,做jQuery的版本檢查之前,要求它,拉請求是否「正確」的版本是有,我們可以簡單的別名jQueryMPjQuery。但是,這會使代碼複雜化,只能解決單個版本的jQuery的問題。

+2

感謝您的解釋。值得在RenderIncludes()方法中加入默認的'bool = true'參數來選擇jQuery的加載嗎?然後用戶知道他們正在頁面的其他地方加載正確的版本,然後可以調用'RenderIncludes(false)'。如果你認爲這是一種可行的方法,那麼很樂意做這項工作。 – growse 2012-04-12 07:40:34

+3

罰款一個補丁,也許RenderIncludes(useExistingjQuery:true) - 這反過來可以生成'jQueryMP = jQuery;'而不是加載它 – 2012-04-12 08:28:57

+1

在最新版本,請執行此操作:StackExchange.Profiling.MiniProfiler.Settings.UseExistingjQuery = true; – pbz 2012-12-29 12:23:25

0

因爲它們具有不同的url,這些是瀏覽器的不同資源。也許你只是不需要你添加的第一個腳本。

或嘗試這個技巧:

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

我不問爲什麼瀏覽器正在加載這兩個腳本,我問爲什麼從MiniProfiler自動生成的代碼是決定加載一個已經加載的腳本,以及如何我可以關閉它。 – growse 2012-04-11 11:53:41

+0

閱讀我的第二句話:刪除: Gavriel 2012-04-11 11:58:46

+1

然後,如果MiniProfiler不是,那麼依賴jQuery的腳本將不會執行沒有呈現? – growse 2012-04-11 12:06:22

相關問題