Как отобразить HTML к браузеру инкрементно за длительный промежуток времени?

По сути, вы должны проверить , чтобы увидеть.

Обученный Guesswork (ненадежный):

На случай, если какой-то компилятор его не оптимизирует ...

Весьма вероятно, что x * x * x быстрее, чем Math.Pow(x, 3), поскольку Math.Pow должен решать проблему в общем случае, касающуюся дробных степеней и других вопросов, в то время как x * x * x просто потребует пара умножает инструкции, поэтому, скорее всего, это будет быстрее.

12
задан Kevin Hakanson 5 June 2009 в 02:47
поделиться

8 ответов

Длинный опрос - это распространенный способ сделать что-то вроде этого; Вкратце, он работает следующим образом:

  1. Клиент отправляет XHR на сервер.

    • Если есть данные, сервер возвращает их немедленно.
    • Если нет, сервер сохраняет соединение открытым до тех пор, пока не будут получены данные. становится доступным, тогда он возвращает это.
    • Если запрос истек, вернитесь к 1).
  2. Страница, запущенная на клиенте, получает эти данные и делает то, что делает с ними.

  3. Go назад к 1)

Вот как Facebook реализует свою функцию чата .

В этой статье также проясняются некоторые неправильные представления о длинном опросе и подробно описываются некоторые преимущества использования этого метода. итак.

14
ответ дан 2 December 2019 в 18:21
поделиться

Клиент закроет соединение, если не получит никаких данных в течение определенного времени. На этот тайм-аут не влияют заголовки HTTP. Он зависит от клиента и обычно устанавливается на 120 секунд IIRC.

Так что все, что вам нужно делать, это регулярно отправлять небольшие объемы данных, чтобы избежать таймаута.

2
ответ дан 2 December 2019 в 18:21
поделиться

Я думаю, что более надежным решением является страница с таймером Javascript, который опрашивает сервер на предмет новых данных. Протокол HTTP не предназначен для того, чтобы оставить ответ открытым.

1
ответ дан 2 December 2019 в 18:21
поделиться

Я бы просто повторил / распечатал HTML по ходу. Есть несколько различных способов приостановить скрипт перед отправкой следующего бита. Вам не нужно ничего делать с заголовками или каким-либо специальным кодом, чтобы заставить браузер ждать. Пока ваш сценарий все еще выполняется, он будет отображать HTML-код, полученный от сценария.

echo "<HTML><HEAD.../HEAD><BODY>";
while (running)
{
    echo "printing html... </br>";
}
echo "</BODY></HTML>";  //all done
1
ответ дан 2 December 2019 в 18:21
поделиться

Попробовать вечно фрейм (как в Gmail)

Все эти приемы - всего лишь хаки, http не предназначен для этого.

1
ответ дан 2 December 2019 в 18:21
поделиться

В зависимости от того, что вы делаете, вы можете просто отображать эхо в ходе выполнения сценария, затем HTML-код будет отправлен в браузер по мере его отображения.

0
ответ дан 2 December 2019 в 18:21
поделиться

в конце вашего скрипта используйте что-то вроде этого (при условии, что вы включили буферизацию вывода, поместив ob_start () вверху страницы

<?php

set_time_limit(0); // Stop PHP from closing script after 30 seconds

ob_start();

echo str_pad('', 1024 * 1024, 'x'); // Dummy 1 megabyte string

$buffer = ob_get_clean();

while (isset($buffer[0])) {

$send = substr($buffer, 0, 1024 * 30); // Get 30kbs bytes from buffer :D
$buffer = substr($buffer, 1024 * 30); // Shorten buffer

echo $send; // Send buffer
echo '<br />'; // forces browser to reload contents some how :P

ob_flush(); // Flush output to browser
flush(); 

sleep(1); // Sleep for 1 second

}

?>

Этот скрипт в основном выводит 1 мегабайт текста на скорости 30 кбит / с (смоделировано) независимо от скорости соединения пользователя и сервера.

1
ответ дан 2 December 2019 в 18:21
поделиться

Я бы посоветовал вам изучить возможность реализации такой функциональности с использованием Ajax, а не простого старого HTML. Это обеспечивает большую гибкость с точки зрения архитектурного дизайна и пользовательского интерфейса

0
ответ дан 2 December 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: