Modernizr是否加载脚本一次?

时间:2012-12-20 19:53:24

标签: javascript firebug modernizr yepnope

我正在使用Modernizr的加载器(集成的yepnope.js)有条件地加载javascript代码。这是我的代码:

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});
});

虽然有效,但FireBug和Google Developers工具中的“网络”标签显示它会两次加载get-native-geo-data.js。我在native-geo-data.js中添加了一个console.log(),并只打印一次消息。那么是什么让FireBug和Dev Tools报告两个网络调用都返回200,大小为3K?

这就是Firebug报告每个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

通过Charles监控工具运行后,我看到相同的结果 - 该函数被调用两次。那么这个错误在哪里 - 在Modernizr中,在yepnope中,还是在我脑海中?

1 个答案:

答案 0 :(得分:2)

不确定你是否在yepnope文档中看过它:

  

我在开发工具中看到两个请求,为什么要加载所有内容   两次?根据您的浏览器和服务器,这可能意味着a   几个不同的事情。由于yepnope如何工作的性质,那里   是为每个文件提出的两个请求。第一个请求是加载   资源进入缓存,第二个请求是执行它(但是   因为它在缓存中,所以它应该立即执行)。看到两个   只要第二个请求被缓存,请求就很正常了。如果   您注意到第二个请求未缓存(并且您的脚本已加载   时间加倍),然后确保你发送正确的缓存   标题允许缓存脚本。这至关重要   yepnope。没有启用适当的缓存,它将无法工作。我们其实   测试以确保在我们的测试套件中没有加载两次,所以如果   您认为我们的浏览器中可能存在双重加载错误,   我们鼓励您运行测试套件以查看是否有双重加载   测试通过。