Mi aiutate a capire una cosa?

Passo subito al sodo:
ho un'applicazione Web che fa una chiamata 2.0 per la conversione di un file MOLTO grosso in SWF; la chiamata può avere la forma (1) o (2) di cui sotto, le ho provate entrambe.

-> Fino a che il server non termina il suo compito, la chiamata rimane aperta ed il browser accoda le successive chiamate XHR. Ho quindi il browser bloccato fino a che la chiamata non termina.

Domande:
1. c'è modo di ovviare senza un timeout della chiamata (parallelizzare le XHR) ?
2. perchè se metto i timeout (decommentando i commenti sotto), il browser, pur presentando l'alert timeout, rimane lo stesso "bloccato" ?

Ho provato sia su Win che su nix, sia con Apache prefork mode che thread, ed anche con lighttpd...

Grazie.

(1)
codice:
dojo.xhrGet(
        {
        url: "interface.controlCenter.php?makeSwf&bookletId=<?php echo $bookletId;?>&fileName="+fileNames,
 
        preventCache: true,
        //timeout: 10000,
        load: function(response, ioArgs) { updateInternalFilesGrid(); },
        //error: function(response, ioArgs) { alert("Timeout."); }
        });
(2)
codice:
   var uri = "interface.controlCenter.php?makeSwf&bookletId=<?php echo $bookletId;?>&fileName="+fileNames;
        if (typeof XMLHttpRequest!="undefined") xmlhttpmsif = new XMLHttpRequest();
        else if (typeof window.ActiveXObject!="undefined") xmlhttpmsif = new ActiveXObject("Microsoft.XMLHTTP");
        else return false;
 
        xmlhttpmsif.open("GET",uri,true);
        xmlhttpmsif.onreadystatechange = function()
            {
            if (xmlhttpmsif.readyState==4) 
                updateInternalFilesGrid();
            }
        xmlhttpmsif.send(null);
        //window.setTimeout("alert('Timeout.'); xmlhttpmsif.abort();",10000);  // just to test.