1

我正在使用 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 工具中的 Network 选项卡显示它加载了两次 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 中,还是在我的脑海中?

4

1 回答 1

2

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

我在我的开发工具中看到两个请求,为什么它会加载两次?根据您的浏览器和服务器,这可能意味着一些不同的事情。由于 yepnope 工作方式的性质,每个文件都有两个请求。第一个请求是将资源加载到缓存中,第二个请求是执行它(但由于它在缓存中,它应该立即执行)。只要第二个请求被缓存,看到两个请求是很正常的。如果您注意到第二个请求没有被缓存(并且您的脚本加载时间加倍),那么请确保您发送正确的缓存标头以允许缓存您的脚本。这对 yepnope 至关重要。如果没有启用适当的缓存,它将无法工作。我们实际上进行了测试,以确保在我们的测试套件中不会加载两次,

于 2012-12-20T20:28:34.347 回答