javascript并行

时间:2010-01-13 14:27:39

标签: javascript web-services parallel-processing

嗯,首先我要说的是我在互联网开发领域有点新鲜。

无论如何,我试图知道是否可以使用javascript并行运行两段代码。

我真正需要的是调用远程服务器中的两个方法。我为两者传递了一个回调函数,该函数将在我想要的数据准备就绪后立即执行。由于运行这些功能的服务器需要一些时间来回答,我正试图找到一种同时调用这两种方法的方法,而不需要等到第一次完成调用第二种方法。

像setTimeout这样的方法是否会同时运行,例如

setTimeout(func1, 0);
setTimeout(func2, 0);

...

function func1()
{
   webMethod1(function() {alert("function 1 returned"); } );
}

function func1()
{
   webMethod2(function() {alert("function 2 returned"); } );
}

被修改

我刚刚发现这篇文章对于下一代浏览器的发布可能非常酷:Javascript web workers

5 个答案:

答案 0 :(得分:7)

在普通的WebBrowsers中,Javascript中有单个线程执行:您的计时器处理程序将被串行调用。使用计时器的方法适用于您出现的情况。

John Resig有一个 nice piece of documentation on timers (非常受欢迎的jQuery javascript框架的作者 - 如果你是Web开发新手,我建议你查阅一下)。

现在,如果您指的是基于HTML5的浏览器,那么在某些时候,它们应该具有线程支持。

答案 1 :(得分:2)

是的,这正是通过AJAX进行Web请求的方式。不需要setTimeout到0,你可以逐个调用它们,并发出一个AJAX请求,它将异步执行,允许你传递一个回调函数,以便在请求完成时调用。 / p>

创建AJAX请求的方法因您运行的浏览器而异。如果您打算构建一些在很大程度上取决于AJAX的东西,并且您希望它能够在多个浏览器中运行,那么您最好使用库。以下是它在jQuery中的完成方式,例如:

$.ajax({ url: '/webrequesturl', success: function(result) {
    // this will be called upon a successful request
} });
$.ajax({ url: '/webrequest2url', success: function(result) {
    // this will be called upon a successful request
    // this may or may not be called before the above one, depending on how long it takes for the requests to finish.
} });

答案 2 :(得分:2)

好吧,JavaScript是单线程,两个计时器会一个接一个地顺序运行,即使你没有注意到它。

我建议你看看下面的文章,它真正解释了定时器和异步事件的工作原理,它还将帮助你理解JavaScript的单线程特性:

作为替代方案,您可以查看WebWorkers,这是一种在单独的后台线程中运行脚本的方法,但它们仅受现代浏览器的支持。

答案 3 :(得分:0)

您正在寻找的是异步客户端 - 服务器通信(关键字:async)。异步函数会立即返回,但在满足指定条件后将执行提供的回调。

因此,如果向服务器发送请求的函数是异步的,这将允许您将两个请求发送到服务器而无需等待响应。

使用setTimeout可能有效,因为这将调度两个请求发送函数。但是,有些浏览器一次只运行一个Javascript线程,结果是其中一个调度函数会运行并阻塞(等待回复),另一个调度函数将等到第一个完成开始运行。

建议您使用服务器通信库的异步支持。例如,jQuery默认使用async。

答案 4 :(得分:-2)

这取决于JavaScript引擎。