停止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系统,因此无法将其分离