プロが教える店舗&オフィスのセキュリティ対策術

データ検索などのPHPで結果が数千件あり、PHPで一覧を表示する際(表示上はHTML)
そのままだとページが長すぎて完全ロードするまで正常動作せず、非常に重くなり固まります
通常だとページを分けて表示させ、次ページボタンなどで遷移させると思いのですが

よくある無限スクロールの様に、長くてもローディングして順々に表示させるような方法はないでしょうか
実際の無限スクロールなどは複数ページを繋げているようなので
PHPのその場で一時的に表示させる1枚の長いページでではできないように思えます。
順々にローディングして固まらないよう表示させる
何か良い方法はないものでしょうか

質問者からの補足コメント

  • はい、tableではなくリストタグでくくっています
    DIVでも可能です。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/04/12 18:22
  • AJAXでロードというと
    http://webdrawer.net/javascript/loadajax.html
    このサイトで書かれている様なものでしょうか

    PHPで一時的に表示させる為、htmlを出力保存はしないのですが
    PHPにてその時に応じた表示させたい長いHTMLをechoで表示させています。
    この時点でHTMLの内容がどうであれ全体ロードが開始され大量の場合は時間がかかるので無理なのでしょうか
    またはその長いHTMLのロードを一部分までに止める事ができ、順々にAJAXなどでロード表示させる事が可能なのでしょうか

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/12 18:30

A 回答 (3件)

ページをdivで分割


スクロールイベントでdivの各表示の有無を判別し
必要なdivの内容をAJAXでロード。
この回答への補足あり
    • good
    • 0

ひょっとしてtableになっていませんか?

この回答への補足あり
    • good
    • 0

長すぎるデータは必要なデータへのアクセス性もわるく、すべきではありません。


ページングしてください

または全データ一括で出力したいのであれば、csvやexcelのデータにして
ダウンロードさせるのが賢明でしょう

一応、httpやブラウザの特性を生かせば途中段階のデータも順次出力することは可能です。
出力したいデータがループで処理しているなら、何行かに一度フラッシュする処理を
いれてやってください。

<?PHP
set_time_limit( 0 );
echo str_repeat(' ',1024);
for($i=0;$i<=9;$i++){
print $i;
@ob_flush();
@flush();
sleep( 1 );
}

このような処理の場合、window.onloadの処理などがうまく利かない可能性もあるので
運用のさいは注意してください
    • good
    • 0
この回答へのお礼

有難うございます
>ページングしてください
その方が良い気がしました。
>途中段階のデータも順次出力
順次出力参考になります。
こちらだとどの様な表示動作になるのか色々試してみたいと思います。

お礼日時:2015/04/13 14:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!