逐步加载网页?

时间:2014-03-08 21:05:37

标签: php perl

我在服务器上运行perl cgi脚本,该脚本处理要下载到用户浏览器的给定文本。在某些情况下,文本可能会很长,并且用户可能需要等待一段时间才能在脚本运行完成之前查看任何内容。即使我为每个处理的文本块发送打印命令,在脚本最终完成之前仍然没有文本出现。

有没有办法允许用户在处理文本时看到每个文本块,而不必等到整个页面完成?

我花了一点时间研究使用jquery的图像的惰性加载器,但是它们似乎并不是我正在寻找的解决方案。

如果需要,我也可以使用PHP来提供页面。

谢谢,Allasso

1 个答案:

答案 0 :(得分:0)

“EventSource”和“服务器端事件”是适合搜索的关键字。 2个非常有用的链接:

http://www.w3schools.com/html/html5_serversentevents.asp(我无能为力,它有效,而且很简单......) http://www.html5rocks.com/en/tutorials/eventsource/basics/

-EDIT - 另一个非常好的资源:

https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events

为了快速入门,我使用了w3schools的例子:

HTML:

<!DOCTYPE html>
<html>
<body>
<h1>Getting server updates</h1>
<div id="result"></div>

<script>
if(typeof(EventSource)!=="undefined")
  {
  var source=new EventSource("demo_sse.php");
  source.onmessage=function(event)
    {
    document.getElementById("result").innerHTML+=event.data + "<br>";
    };
  }
else
  {
  document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
  }
</script>

</body>
</html>

demo_sse.php: (编辑 - 将demo_sse.php更改为更相关的示例)

<?php

  header("Content-Type: text/event-stream\n\n");

  while (1) {
    $curDate = date(DATE_ISO8601);
    echo 'data: This is a message at time ' . $curDate . "\n\n";
    ob_flush();
    flush();
    sleep(1);
  }

?>