我有以下foreach循环:
<?php
ob_start();
foreach ($streams as &$stream) {
$array = stream($stream);
?>
<a href="livestreams.php?stream=<?=$stream;?>">
<div class="channel-preview" style="background-image:url(<?=$array[2];?>);">
<div class="container">
<hgroup>
<h1><?=$array[4];?></h1>
<h2><?=$array[3];?></h2>
</hgroup>
<div class="meta">
<span class="live-viewers">Live Viewers:</strong> <?=$array[1];?></span>
</div>
<span class="game-badge starcraft-2" title="Starcraft 2"><span class="hide">Starcraft 2</span></span>
</div>
</div>
</a>
<?php
ob_flush();
flush();
}
ob_end_flush();
?>
请注意,这只是整个脚本的一部分。它的问题是,它的加载速度相当慢。我尝试使用 ob_flush();如您所见,加快速度,但没有太大区别。
我的问题是整个页面的加载时间。页面甚至需要一些时间才能显示在浏览器中。是否可以在页面已经呈现时使用 AJAX 加载循环?还是有其他方法?
编辑:
正在循环的是从外部服务器接收的,这很可能是导致延迟的原因。我应该早点说明这一点。
像这样的简单技巧可能会起作用[如 php.net 所建议]
<?php
// All you need is 256 spaces first
echo str_repeat(" ", 256)."<pre>"; flush();
// and ANY TAG before 'r'n
echo "working...<br/>'r'n"; flush(); sleep(1); // this in cycle
?>
编辑:刷新后添加延迟也可以解决问题:
usleep(50000);// delay minimum of .05 seconds to allow ie to flush to screen
请在此处阅读有关刷新的更多信息以及刷新问题的建议解决方法:http://php.net/manual/en/function.flush.php