停止javascript一段时间
我有以下代码:停止javascript一段时间,javascript,performance,load,Javascript,Performance,Load,我有以下代码: function require(url, callback, errcallback) { url = makeurl(url); var node = document.createElement('script'); node.type = 'text/javascript'; node.async = true; if (node.readyState) { //IE node.onreadystatechan
function require(url, callback, errcallback) {
url = makeurl(url);
var node = document.createElement('script');
node.type = 'text/javascript';
node.async = true;
if (node.readyState) { //IE
node.onreadystatechange = function () {
if (node.readyState == "loaded" || node.readyState == "complete") {
node.onreadystatechange = null;
callback;
}
};
} else {
node.onload = function () {
callback;
};
}
node.addEventListener('load', callback, false);
node.addEventListener('error', errcallback);
node.onerror = errcallback;
node.src = url;
head.appendChild(node);
return require.getcontents(url);
};
问题是,当我加载一些js文件时,速度不够快,当试图调用我试图加载的文件中的函数时,它将返回一个未定义的错误
例如:
<script>
require(['lib/static/jscript/smodule.js'], null , null );
</script>
<script>
Smodule.somefunction();
</script>
require(['lib/static/jscript/smodule.js'],null,null);
Smodule.somefunction();
它会说Smodule没有定义。
(文件正在加载,但速度不够)将调用放入回调:
require(['lib/static/jscript/smodule.js'], function() {
Smodule.somefunction();
}, null );
您也没有在require
中正确调用回调,您需要在callback
之后调用它:
if (node.readyState) { //IE
node.onreadystatechange = function () {
if (node.readyState == "loaded" || node.readyState == "complete") {
node.onreadystatechange = null;
callback();
}
};
} else {
node.onload = function () {
callback();
};
}
任何依赖于异步操作结果的操作都应该在其回调中完成。因此,要么将
Smodule.somefunction()
放入回调,要么使用node.async=false
回调代码>应该是callback()
node.async=false仍然不工作,并且回调已经是一个函数:require(['lib/static/jscript/smodule.js'],function(){alert('comething');},null);为什么要将数组作为url
参数传递给require
?函数希望它是一个URL。我不能这样做,因为服务器会一个接一个地发送脚本的其余部分(php flush)。我认为这不应该是一个问题-load
事件在完全接收到它之前不应该被触发。是的,但在这种情况下,我不会使用回调。服务器首先发送:require(['lib/static/jscript/smodule.js'],null,null);然后是:Smodule.somefunction();由于使用了Bigpipe系统,因此无法将其分离