使用Modernizr.load(yepnope.js)时,脚本被请求两次的原因是什么?

20
我正在使用yepnope.js动态加载JavaScript文件,并且我注意到我的脚本在Firebug和Webkit Inspector中出现了两次。
问题在于,在Firebug的Net面板(Firefox 4最新版本)中,它们的响应是200,而不是304。这似乎比Chrome慢。
我已经上传了这个视频展示了这个问题。您可以看到文件jquery-1.6.1.min.jslibs.js被多次加载。
我使用以下代码来实现这一点,简化如下:
Modernizr.load({
                load: ['jquery-1.6.1.min.js', 'libs.js'],
                complete: function () {
                    console.log("loaded");
                }
});

Modernizr.load() 就是 yepnope()


@HappyDeveloper 请查看yepnopejs的网站 - 它也可以做同样的事情。也许这就是它的工作方式。但是,它似乎要下载两次? - Phil Ricketts
1个回答

25

他们的文档中有一条注释:

来自http://yepnopejs.com/

我在开发工具中看到两个请求,为什么会加载两次?

根据您的浏览器和服务器,这可能意味着几种不同的情况。由于yepnope的工作原理,每个文件都会进行两个请求。第一个请求是将资源加载到缓存中,第二个请求是执行它(但由于它已经在缓存中,应该立即执行)。只要第二个请求被缓存,看到两个请求是非常正常的。如果您注意到第二个请求没有被缓存(并且您的脚本加载时间加倍),那么请确保发送正确的缓存标头以允许缓存您的脚本。这对于yepnope至关重要。如果没有启用适当的缓存,它将无法正常工作。我们实际上测试以确保在我们的测试套件中没有两次加载的情况,因此如果您认为我们的浏览器可能存在关于双重加载的错误,请鼓励您运行测试套件以查看双重加载测试是否通过。


2
我后来意识到了这一点,对我的无知请谅解,感谢您的回答。 - Phil Ricketts
2
我仍然不明白为什么他们非得这样做。Facebook的引导加载程序没有两次加载文件的问题。 - Rihards
如果网络活动中出现了2个请求的问题,最好的“插拔式”替代方案是什么? - AwokeKnowing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接