В своем коде я создал 5 фреймов с тегом script для получения ответов от сервера.
нам нужно сделать это параллельно. Кроме того, из-за междоменных проблем мы не выбрали технологию Ajax, просто создавая фреймы одновременно для выполнения асинхронных запросов.
<script type="text/javascript" href="http://www.example1.com/json.js"></script>
<!-- //---------------------------------------------------------------------(1)-->
<script type="text/javascript">
var url = "http://www.example2.com/getResponse/";
var count = 5;
var callback = "callback";
function iframeCallback(index) {
var iframe = document.createElement('iframe');
iframe.style.border='0px';
iframe.style.width ='0px';
iframe.style.height='0px';
document.body.appendChild(iframe);
var content = "<script type='text/javascript'>";
content += "var begin = new Date();"; //------------------(2)
content += "var jsText = \"<script type='text/javascript' src='" + url + "'></\" + \"script>\";";
content += "document.write(jsText);";
content += "</"+"script>";
content += "<script type='text/javascript'>";
content += "var data = eval('"+callback+"');"; //------------------(3)
content += "window.parent.getRepsonse(data);";
content += "</"+"script>";
}
function getRepsonse(data) {
//Deal with the responses here
//------------------------------------------------------------------(4)
}
function doMainProcess() {
for (i=0; i<count; i++) {
iframeCallback(i);
}
//pause the main thread here to wait until calls are finished
//------------------------------------------------------------------(5)
//go on to do something else
}
</script>
Мои вопросы здесь:
Почему существует задержка по времени для document.write тега script?
Когда я отлаживал код выше, я обнаружил, что между (1) и (2) существует задержка во времени. Есть ли способ сделать так, чтобы два произошло одновременно? Или уменьшите задержку как можно короче.
Почему задерживается выполнение тега скрипта?
Задержка между (2) и (3) также странная. Когда мы пытаемся перейти непосредственно к URL-адресу для вызова, это займет всего 150 мс, но если мы используем тег script для выполнения вызова, это займет 400 мс +.
Необходимо максимально приблизить время звонка к прямому звонку.
Как мы можем приостановить загрузку остальной части страницы, пока не получим ответы от iframes?
По какой-то причине мы не можем просто использовать функцию "setTimeout" для создания временной задержки в (5).
Я попытался установить флаг в (4) при ответе на последний вызов, а затем использовать цикл while в (5), чтобы приостановить загрузку страницы. но, похоже, не имеет никакого эффекта. Если это так, то вызовы в iframes также будут блокироваться до завершения цикла while.
Есть ли хороший способ приостановить основной поток в (5), чтобы дождаться завершения всех вызовов?