Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确定所有脚本何时完成运行?_Javascript_Performance_Browser - Fatal编程技术网

Javascript 如何确定所有脚本何时完成运行?

Javascript 如何确定所有脚本何时完成运行?,javascript,performance,browser,Javascript,Performance,Browser,我正在使用Javascript和jQuery呈现页面 页面必须很快加载。因此,我想先呈现一些基本信息,然后再发送另一个请求以获取一些附加信息 我的问题是我应该什么时候发送第二个请求?如何知道基本信息何时已完全完成渲染,并且没有脚本仍在运行?设置一个信号量,您可以使用计时器进行检查。假设您有5个脚本正在运行。设置全局变量finishedRunning=0。在每个脚本中,在返回(即完成)之前执行finishedRunning+=1。当完成调度达到5时,您就可以开始了。设置一个信号量,您可以使用计时器

我正在使用Javascript和jQuery呈现页面

页面必须很快加载。因此,我想先呈现一些基本信息,然后再发送另一个请求以获取一些附加信息



我的问题是我应该什么时候发送第二个请求?如何知道基本信息何时已完全完成渲染,并且没有脚本仍在运行?

设置一个信号量,您可以使用计时器进行检查。假设您有5个脚本正在运行。设置全局变量
finishedRunning=0。在每个脚本中,在返回(即完成)之前执行
finishedRunning+=1。当
完成调度
达到5时,您就可以开始了。

设置一个信号量,您可以使用计时器进行检查。假设您有5个脚本正在运行。设置全局变量
finishedRunning=0。在每个脚本中,在返回(即完成)之前执行
finishedRunning+=1。当
完成翻滚
达到5时,您就可以出发了。

可能会更好,是否可以使用这种方法?除了requirejs之外,还有我喜欢的类似方法。

如果使用这种方法可能更好?除了requirejs之外,我还喜欢类似的东西。

这听起来像是一份针对

的工作。我猜你在使用
$.ajax()
方法。因此,查看文档,您将看到
success
选项,您可以使用该选项在请求成功完成时运行代码。我认为有多个请求具有自己的处理程序,并且希望知道所有请求何时完成……与基本信息相关联的脚本是否进行了任何异步处理,如ajax?如果没有,您可以确信它们都是按照包含它们的顺序运行的,并且您可以将加载附加信息的代码放在最后一个脚本之后。将脚本放在正文的末尾,您可以确信所有基本内容在运行之前都已加载。是否需要使用
setTimeout(…,0)
?何必麻烦呢?当您延迟附加请求时,如果您不知道这是有意的,则页面的加载速度会变慢。只要尽快加载所需的所有内容。我猜您正在使用
$.ajax()
方法。因此,查看文档,您将看到
success
选项,您可以使用该选项在请求成功完成时运行代码。我认为有多个请求具有自己的处理程序,并且希望知道所有请求何时完成……与基本信息相关联的脚本是否进行了任何异步处理,如ajax?如果没有,您可以确信它们都是按照包含它们的顺序运行的,并且您可以将加载附加信息的代码放在最后一个脚本之后。将脚本放在正文的末尾,您可以确信所有基本内容在运行之前都已加载。是否需要使用
setTimeout(…,0)
?何必麻烦呢?当您延迟附加请求时,如果您不知道这是有意的,则页面的加载速度会变慢。只要尽可能快地加载所需的所有内容。使用计时器,您是指计数器吗?如果他在0开始计数器,在脚本计数器+1开始时,在完成-1Nope时,会更好。计时器。它可以每秒左右检查一次
finishedRunning
变量。如果其中一个脚本出现错误并且
finishedRunning
从未到达
5
,每x秒检查一次可能是一个瓶颈@nnnnnn:+1不会太长,除非是长时间运行的脚本。但是OP提到这是基本的东西。你是说计数器?如果他在0开始计数器,在脚本计数器+1开始时,在完成-1Nope时,会更好。计时器。它可以每秒左右检查一次
finishedRunning
变量。如果其中一个脚本出现错误并且
finishedRunning
从未到达
5
,每x秒检查一次可能是一个瓶颈@nnnnnn:+1不会太长,除非是长时间运行的脚本。但是OP提到这是基本的东西。
var asyncOperations = {
    counter: -1, // -1 because the value should not already met the ending condition at initialization
    finishedHandler: null;
    startOp: function() {
         if(counter == -1) counter = 0;
         counter++;
    },
    endOp: function() {
         counter++;
         if(counter == 0 && finishedHandler) {
             finishedHandler.inform();
    }
}

function handler(data) {
     doSomethingWithData();
     asyncOperations.endOp();
}

function allOperationsFinished() {
    alert("success");
}

function main() {
    asyncOperations.finishedHandler = allOperationsFinished;
    $.ajax(...whatever..., handler);
}