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