0

次の 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 を使用してループをロードすることは可能でしょうか? それとも他の方法はありますか?

編集:

ループしている は外部サーバーから受信されますが、それが遅延の原因である可能性が最も高いです。これは先に述べておくべきでした。

4

1 に答える 1

0

このような単純なトリックのように[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 を参照してください。

于 2012-06-28T19:59:22.070 に答える