- ベストアンサー
PHPの高速化
HTMLとphpがごちゃごちゃになるとややこしいので $HTML .= "<div>hogehoge</div>" のような、HTMLソースコードをすべて、いったん変数に格納し、最終的に echo $HTML; とする手法で、作成していったのですが、 HTMLを変数に埋め込んだせいか、PHPの処理が完全に終わるまで HTMLが表示されなくなってしまい、 表示に時間がかかるようになってしまいました。 待ち時間を感じさせぬよう、HTMLを先に表示させ、 そのあとで、データベースに接続や、繰り返し処理のデータを 表示させるには、現在のすべてのHTMLソースを変数に入れるという 設計を改めるしかないのでしょうか。 または、別の方法で、 HTML記述部分を優先的に処理させる方法はないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
そりゃそうでしょ。 だってブラウザ側はPHPが出力しないとデータ貰えないから何も表示しようがないよね。 php(サーバ)側は処理をしているから関係ないと思っているのかもしれないけどそういう仕掛けでブラウザはただただ待つしかないって状況だね。 echoの数を減らして っていうのは総合的にphp側の処理が減るからその分早いけどユーザ側は減ったechoの分だけ待たされる事になるんだよ。 HTML部分を優先するには ぱっと思いつくのは2通り ・懸念通り設計を改める 少しずつ出力する今まで通りの設計 ・javascriptを絡ませる 枠組みHTMLだけ先に出してしまい、 javascriptによってphpから別途情報を受け取って描画 ajaxとか呼ばれてる手法でadobeストアとか行くとそんな事してるのがみれるよ どっちにしろ設計変更は免れないね。
その他の回答 (2)
- tom7net
- ベストアンサー率66% (2/3)
優先表示ということなら、ANo.2の方がおっしゃっているようにflushをかけて少しずつ表示をさせるとか。 htmlとphpが混ざるのが困るようであれば、仕組みが変わってしまいますがsmartyを利用するとかどうでしょう。 ご参考程度に。
お礼
回答ありがとうございます。 smartyはよくプログラムとデザインの分別化のツールとしてよく聞きますが パフォーマンスにはあまり影響ないんでしょうか。 smartyについても調べてみます。
- yambejp
- ベストアンサー率51% (3827/7415)
手っ取り早いのはiframeをつかう。 抵抗があるならajaxで遅いコンテンツをあとから読み込む。 phpだけでなんとかしたいならこまめにprintとflush()をしてやる
お礼
回答ありがとうございます。 flush()初めて聞きました。 調べてみます。
お礼
回答ありがとうございます。 phpをサーバーに上げたところ、ローカルよりもサーバーのほうが処理速度が速かったらしく だいぶマシになりました。 ただ、サーバーでも遅くなってしまっていたら おっしゃる通りAJAXでリアルタイムな処理をするしかないのかもしれません。