Javascript 异步加载库时如何处理依赖关系?
GooglePageSpeed说我应该异步加载我的JS文件,但这给我的许多页面带来了一个问题,即使用库和插件的代码 例如,我在一个页面上有以下代码:Javascript 异步加载库时如何处理依赖关系?,javascript,jquery,asynchronous,Javascript,Jquery,Asynchronous,GooglePageSpeed说我应该异步加载我的JS文件,但这给我的许多页面带来了一个问题,即使用库和插件的代码 例如,我在一个页面上有以下代码: $(document).ready(function () { var hound = new Bloodhound({ ....... }); 因此,当页面加载时,我正在创建一个Twitter侦探(与Typeahead一起使用)对象。问题是,如果同步加载了Brandhound和Typeahead,则会抛出一个错误: Uncaught R
$(document).ready(function () {
var hound = new Bloodhound({ .......
});
因此,当页面加载时,我正在创建一个Twitter侦探(与Typeahead一起使用)对象。问题是,如果同步加载了Brandhound和Typeahead,则会抛出一个错误:
Uncaught ReferenceError: Bloodhound is not defined
这是因为这些脚本尚未加载
我提出了这个解决方案:
$(document).ready(function () {
createBloodhound();
});
function createBloodhound() {
if (typeof Bloodhound != "undefined") { // if bloodhound JS has loaded
var hound = new Bloodhound({ .......
}
else {
setTimeout(function(){
createBloodhound();
}, 10);
}
}
这是一个好的做法,还是有更好的方法
注意:我意识到有像RequireJS这样的库在加载文件时处理依赖关系,但我认为这种类型的解决方案在我的情况下不会起作用,因为我在包装文件中异步加载库(因为每个页面都需要它们)。这里的示例代码不会出现在每个页面上,而是只出现在我的网站的特定页面上。最好的方法是使用回调机制,您可以对其做出反应,而不是使用轮询机制。我使用了,它简单但功能强大,并提供回调机制
没有这些,你可以自己实现一些东西。不过在性能方面,使用回调更好。根据站点的复杂性,不同的选项可能是最好的。如果