2012-12-20 83 views
1

我有條件地使用Modernizr的加載器(集成的yepnope.js)加載JavaScript代碼。這裏是我的代碼:Modernizr是否加載腳本一次?

Modernizr.load({ 
test: Modernizr.geolocation, 
yep: ['js/get-native-geo-data.js','https://www.google.com/jsapi'], 
nope: ['js/get-geo-data-by-ip.js','https://www.google.com/jsapi'], 
complete : function() { 
    google.load("maps", "3", 
       {other_params: "sensor=false", 'callback':init}); 
}); 

它的工作原理,但在這兩種螢火蟲和谷歌開發者工具Network標籤顯示它加載獲得本地-地理data.js兩次。我在native-geo-data.js中添加了一個console.log(),並且只打印一次該消息。那麼是什麼讓FireBug和Dev Tools報告兩個網絡調用都返回200,大小爲3K?

這是螢火蟲如何報告響應頭爲每個GET(它們是相同的):

HTTP/1.1 200 OK 
Date: Thu, 20 Dec 2012 19:39:52 GMT 
Server: HttpComponents/4.1.3 
Content-Length: 3054 
Content-Type: application/x-javascript 
Connection: keep-alive 

運行它雖然查爾斯的監測工具,我看到同樣的結果之後 - 該函數被調用兩次。那麼錯誤在哪裏?在Modernizr中,在yepnope中,還是在我的頭腦中?

回答

2

不知道,如果你已經看到了它的yepnope文檔中:

我看到在我的開發工具兩項請求,爲什麼它裝載的一切 兩次?根據您的瀏覽器和服務器的不同,這可能意味着 兩件事情不同。由於yepnope的工作原理, 是針對每個文件提出的兩個請求。第一個請求是對 資源加載到緩存中,第二個請求是執行它(但 因爲它是在緩存中,就應立即執行)。只要第二個請求被緩存,看到兩個 請求是非常正常的。如果 您發現第二個請求是不緩存(及你的腳本加載 時間加倍),那麼請確保您發送正確緩存 頭,讓你的腳本的緩存。這對於yepnope來說至關重要。如果沒有啓用適當的緩存,它將無法工作。實際上,我們 測試,以確保事情不會在我們的測試套件裝的兩倍,因此,如果您 認爲我們可以在瀏覽器中的錯誤有關雙重負荷, 我們建議您運行測試套件,看看雙裝載 測試通過。

+0

感謝您對yepnope文檔的參考。這絕對不是緩存在我的情況。 yepnope文檔並沒有說明如何正確指定緩存策略。我發現的唯一的其他參考是使用預加載,但這正是我不想做的 - 我需要加載其中一個或另一個腳本。我試着用預緊前綴 沒錯:「預加載JS /獲取本地-地理data.js!」,「HTTPS://www.google.com/jsapi」] ,但它並沒有發揮作用。 –

+0

嘗試在HTML文件中使用也沒有幫助。 –

+0

你也可以閱讀這個問題在這裏https://github.com/SlexAxton/yepnope.js/issues/10看起來就像你不能100%依靠在這種情況下Firebug的信息。 –