我正在尝试将模块YSlow实现到我自己的项目中。我想使用的一个函数如下:
YSLOW.registerRuleset = function (ruleset) {
YSLOW.controller.addRuleset(ruleset);
};
据我所知,YSlow在开头的代码中被分配到这里:
if (typeof YSLOW === 'undefined') {
YSLOW = {};
}
我想做的是导出这个类并能够使用这个函数。我通常只会说:
exports.sayHello = function() {
return "Hello"
};
但是,当YSLOW处于初始状态时,我不确定如何正确地与registerRuleset()通信。如果我把sayHello()放在yslow.js中,我可以很好地使用它,但对于任何一个开头带有yslow的函数来说,它都不起作用。我曾尝试将YSLOW之前和之后的导出放入函数中,但没有成功。
所以我的问题是,我该如何绕过这个问题?就这一点而言,YSLOW.function()到底在做什么?它的重要性是什么?
谢谢!
我不熟悉YSLOW,因此我不清楚您的查询。
如果您试图检查YSLOW类对象是否已加载,下面的代码可能有助于确定是否已加载。此代码将继续轮询对象,以使其准备就绪并可用。这将轮询20毫秒(您可以增加到更多)。
这是一种破解,你可以继续轮询对象,无论它是否已加载并准备好使用。
function checkLoaded() {
if (YSLOW && YSLOW.controller && YSLOW.controller.addRuleset) {
return true;
}
return false;
}
/* Start: polling to check if YSLOW Objects are ready */
var timeout = Date.now() + 10000,
startTime = Date.now();
var intervalID = window.setInterval(function () {
if (checkLoaded()) {
console.log("GOT Ready at: ", Date.now() - startTime + "ms");
window.clearInterval(intervalID);
initLoad();//do your stuffs after loading here.
} else if (Date.now() > timeout) {
console.log("Not loaded, kill the polling.");
window.clearInterval(intervalID);
failedLoad(); //do your stuff for not loaded here
}
}, 20);