Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
为什么Firefox会等到javascript函数完成后再启动另一个函数?_Javascript_Multithreading_Firefox_Gwt - Fatal编程技术网

为什么Firefox会等到javascript函数完成后再启动另一个函数?

为什么Firefox会等到javascript函数完成后再启动另一个函数?,javascript,multithreading,firefox,gwt,Javascript,Multithreading,Firefox,Gwt,我们正在开发一个前端使用GWT的web应用程序 在GWT中,我们通过添加javascript代码来调用服务器,如下所述: public native static void call(int requestId, String url, ICall handler) /*-{ var callback = "callback" + requestId; //Create a script element. var script = document.createEle

我们正在开发一个前端使用GWT的web应用程序

在GWT中,我们通过添加javascript代码来调用服务器,如下所述:

    public native static void call(int requestId, String url, ICall handler) /*-{
   var callback = "callback" + requestId;

   //Create a script element.
   var script = document.createElement("script");
   script.setAttribute("src", url+callback);
   script.setAttribute("type", "text/javascript");
   script.setAttribute("async", "true");

   //Define the callback function on the window object.
   window[callback] = function(response) {
     handler.@com.xxx.yyy.gui.net.ICall::handleResponse(Ljava/lang/String;)(response);
   } 

   //Attach the script element to the document body.
   document.body.appendChild(script);
  }-*/;
有些电话需要一分钟才能完成,有些则只需几秒钟。如果我们同时进行多个调用,所有调用都将并行执行。这意味着在2秒钟内结束的通话不必等到持续一分钟的通话结束。在Chrome和Safari中也是如此。但是Firefox会等到第一个调用的函数完成后才启动其他函数

为什么Firefox会等到javascript函数完成后再启动另一个函数?如何解决这个问题


感谢您,您可能需要显式地线程化进程,使Firefox并行运行(Firefox没有最新版本,因此他们对并行的支持可能比最近更新的chrome和safari弱)。也可能是Firefox对同时从多个方法访问对象感到不安


代码被全部注释掉的原因是什么?

JavaScript在web上是单线程的,除非您使用(大约从Firefox 3.5开始)。这就是web的工作原理,所有浏览器都将以同样的方式工作。

您可以通过web workers将HTML5与多线程JavaScript结合使用。首先检查您的浏览器是否支持此功能

function supports_web_workers() {
  return !!window.Worker;
}
然后开始使用多线程

   // thread1
   var myBread = new Worker('bread.js');

   // thread2
   var myButter = new Worker('butter.js');

我自己从来没有试过这样做,所以如果我错了,请纠正我。

您的问题有点不正确,因为您使用的不是您可能认为的xhr,而是脚本注入(jsonp)。在这种情况下,firefox将并行下载文件,但按照文件提交给DOM的顺序执行文件。

代码被注释掉,因为这是在Java GWT代码中包含Javascript的标准方法,以使Java编译器满意。谢谢Rafe。代码介于/*-{和}-/之间,因为GWT使用Java,但允许您通过/-{和}-*/围绕它来包含本机javascript。我将查看每个进程的显式线程。这解释了很多。我正要说“这就是你的问题!”的时候,不知道你说的Firefox没有最新版本是什么意思。Firefox3.6于1月21日发布(大约六个月前)。此外,除非您使用web workers,否则浏览器不会并行运行JavaScript,这是HTML5的一个新规范部分。@sdwilsh:对不起,我在猜测Chrome和Safari(从未与它们一起使用过,所以idk知道它们做什么和不做什么)。我所说的发布版是指主要的发布版,Firefox自2008年6月推出3版(2年前)以来就没有发布过,不过他们现在已经有了4个测试版。我们添加了javascript代码,而不是使用RequestBuilder Java对象,因为我们想创建跨站点的requestsYeah,但我认为这对这种情况没有帮助。如果脚本已经运行了一分钟,它仍然会锁定您的网页一段时间。谢谢Stephan!我试试看。米格尔,我对你的结果很感兴趣。