2010-07-28 4 views
3

프런트 엔드에서 GWT를 사용하여 웹 애플리케이션을 개발 중입니다.Firefox가 다른 기능을 시작하기 위해 javascript 기능이 완료 될 때까지 Firefox가 대기하는 이유는 무엇입니까?

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) { 
    [email protected]::handleResponse(Ljava/lang/String;)(response); 
    } 

    //Attach the script element to the document body. 
    document.body.appendChild(script); 
    }-*/; 

일부 통화를 완료하는 분을 초 일부 다른 단지 몇 아래에 명시된 바와 같이 GWT에서

우리는 자바 스크립트 코드를 추가하여 서버에 전화를합니다. 동시에 여러 호출을하면 모든 호출이 동시에 실행됩니다. 즉, 2 초 후에 끝나는 통화는 1 분 동안 통화가 끝날 때까지 기다릴 필요가 없습니다. Chrome과 Safari에서 마찬가지입니다. 그러나 Firefox는 첫 번째 호출 된 함수가 완료되어 다른 함수가 시작될 때까지 기다립니다.

Firefox가 다른 기능을 시작하기 위해 자바 스크립트 기능이 완료 될 때까지 기다리는 이유는 무엇입니까? 이 문제를 해결하는 방법?

감사

+0

우리는 사이트 간 요청을 만들기 때문에 RequestBuilder Java 객체를 사용하는 대신 자바 스크립트 코드를 추가합니다. – Miguel

답변

0
당신은 병렬에 대한 지원이 최근에 업데이트 된 크롬 및 사파리보다 약한 될 수 있도록 명시 적으로, 파이어 폭스는 파이어 폭스가 최근 출시 없었습니다 (병렬로 실행할 수 있도록 프로세스를 스레드 할 수 있습니다

). 파이어 폭스는 동시에 여러 메소드에서 객체에 액세스 할 수있는 몇 가지 장점이 있습니다.

코드가 모두 주석 처리 된 이유는 무엇입니까?

+0

자바 코드를 Java GWT 코드에 포함시키는 표준 방법으로 코드가 주석 처리되었으므로 Java 컴파일러를 행복하게 유지합니다. – Domchi

+0

감사합니다. GWT는 Java를 사용하기 때문에 코드는/* - {and} - */사이에 있습니다./* - {and} - */ 각 프로세스를 명시 적으로 살펴 보겠습니다. – Miguel

+0

많은 설명이 있습니다. 나는 "잘 거기에 문제가있다!" 순간. –

0

worker threads (Firefox 3.5 이후)을 사용하지 않으면 웹상의 JavaScript가 단일 스레드입니다. 이것은 웹이 작동하도록 설계된 방법이며, 모든 브라우저가 동일한 방식으로 작업을 수행합니다.

+0

setTimeout을 사용하여 일종의 가짜 작업자도 사용할 수 있습니다. –

+0

그래,하지만이게 도움이 안 될 것 같아. 스크립트가 실행되는 데 이미 1 분이 걸린다면 여전히 약간의 웹 페이지를 잠글 것입니다. – sdwilsh

2

웹 작업자를 통해 HTML5와 멀티 스레드 JavaScript를 함께 사용할 수 있습니다. 먼저 브라우저가이를 지원하는지 확인하십시오.

function supports_web_workers() { 
    return !!window.Worker; 
} 

그런 다음 멀티 스레딩을 사용하십시오.

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

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

내가 잘못하면이 문제를 직접 해결하지 못했습니다.

+0

나는 이것을 연구해야하고 어떻게 작동하는지 알아야 할 것이다 ... –

+0

고마워 스테판! 나는 그것을 시도 할 것이다. – Miguel

+0

나는 당신의 결과에 관심이있을 것입니다, 미구엘. – nottinhill

0

당신의 생각은 xhr을 사용하지 않고 스크립트 삽입 (jsonp)을 사용하지 않기 때문에 질문이 약간 잘못되었습니다. 이 경우 firefox는 파일을 병렬로 다운로드하지만 파일을 DOM에 제출 한 순서대로 파일을 실행합니다.

관련 문제