• ベストアンサー

PHPの高速化

HTMLとphpがごちゃごちゃになるとややこしいので $HTML .= "<div>hogehoge</div>" のような、HTMLソースコードをすべて、いったん変数に格納し、最終的に echo $HTML; とする手法で、作成していったのですが、 HTMLを変数に埋め込んだせいか、PHPの処理が完全に終わるまで HTMLが表示されなくなってしまい、 表示に時間がかかるようになってしまいました。 待ち時間を感じさせぬよう、HTMLを先に表示させ、 そのあとで、データベースに接続や、繰り返し処理のデータを 表示させるには、現在のすべてのHTMLソースを変数に入れるという 設計を改めるしかないのでしょうか。 または、別の方法で、 HTML記述部分を優先的に処理させる方法はないでしょうか。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

そりゃそうでしょ。 だってブラウザ側はPHPが出力しないとデータ貰えないから何も表示しようがないよね。 php(サーバ)側は処理をしているから関係ないと思っているのかもしれないけどそういう仕掛けでブラウザはただただ待つしかないって状況だね。 echoの数を減らして っていうのは総合的にphp側の処理が減るからその分早いけどユーザ側は減ったechoの分だけ待たされる事になるんだよ。 HTML部分を優先するには ぱっと思いつくのは2通り ・懸念通り設計を改める  少しずつ出力する今まで通りの設計 ・javascriptを絡ませる  枠組みHTMLだけ先に出してしまい、  javascriptによってphpから別途情報を受け取って描画  ajaxとか呼ばれてる手法でadobeストアとか行くとそんな事してるのがみれるよ どっちにしろ設計変更は免れないね。

yuzuru0024
質問者

お礼

回答ありがとうございます。 phpをサーバーに上げたところ、ローカルよりもサーバーのほうが処理速度が速かったらしく だいぶマシになりました。 ただ、サーバーでも遅くなってしまっていたら おっしゃる通りAJAXでリアルタイムな処理をするしかないのかもしれません。

その他の回答 (2)

  • tom7net
  • ベストアンサー率66% (2/3)
回答No.3

優先表示ということなら、ANo.2の方がおっしゃっているようにflushをかけて少しずつ表示をさせるとか。 htmlとphpが混ざるのが困るようであれば、仕組みが変わってしまいますがsmartyを利用するとかどうでしょう。 ご参考程度に。

参考URL:
http://www.smarty.net/manual/ja/
yuzuru0024
質問者

お礼

回答ありがとうございます。 smartyはよくプログラムとデザインの分別化のツールとしてよく聞きますが パフォーマンスにはあまり影響ないんでしょうか。 smartyについても調べてみます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

手っ取り早いのはiframeをつかう。 抵抗があるならajaxで遅いコンテンツをあとから読み込む。 phpだけでなんとかしたいならこまめにprintとflush()をしてやる

yuzuru0024
質問者

お礼

回答ありがとうございます。 flush()初めて聞きました。 調べてみます。

関連するQ&A

  • phpでhtmlを取り出すには

    こんにちは。phpを勉強中なのですが質問があります。 phpでhtmlソースを取り出したいのですが、htmlソース(内容はdiv~/divで囲んだソース)はどのように保存すれば良いでしょうか? htmlソースなのですが大量にありまして、そのソースごと並び替えをしてhtmlを表示したいのですが・・。 今自分で作ってみたのは、単純にテキストファイルにhtmlを書いて、phpで並び替え、テキストファイル読み込み表示するという方法なのですが、とりあえずは上手くできたのですが、この方法ですとテキストファイルが大量にできてしまいます。 初心者のサイトではデータはmysqlのデータベースを使う・・とあったので同時にmysqlを少しさわってみたのですが、例えばデータベースの値の所にhtmlのソースを放り込むという事なのでしょうか? 作りたいのはゲームのレビューサイトなのですが可能であれば日付順などボタン一つで並び変えたいのです。(div~/divで囲んだソースごと並び変えたい。div~/divの中には自分のレビューやら画像が入ります) htmlとphpを覚え始めたばかりで、よく分からないのですが通常みなさんはhtmlファイルは何に格納するのでしょうか?

    • ベストアンサー
    • PHP
  • Nowdocの機能をphp5.2で使いたい

    php5.3からヒアドキュメント内部で変数が展開されないNowdocが使えるようになりましたが、 これと同様のことをphp5.2でできないでしょうか。 下のコードで、ヒアドキュメント内の内容を触らずに(\$hogeなどとエスケープせずに) 変数$hogeを展開させない方法を教えてください。 $source = <<<HERE <?php $hoge = "hogehoge"; ?> HERE; echo $source;

    • ベストアンサー
    • PHP
  • phpのプログラミングについての質問です。

    外部ファイルにテンプレートと言うか、データとしてHTMLの書かれたファイルを置くとします。 そして、メインのphpのファイルで変数や定数の処理をさせて、その外部HTMLファイルを読み込ませ、HTML内に記載した変数等を表示させるとします。 // tmp.html // <html> <body> <div> <p>こんにちは{$php}です。<br> 今日は{ConstTest::CONST_TEST}ですね。</p> <p>どうも。{$aisatsu.$php2}です。<br> 今日は{$tenki[1]}なので、悪い天気ですよ。</p> </div> </body> </html> // tmp.html ここまで // 上記のような{$変数}と言う、{ と } で囲った書き方のプログラムを良く見かけるのですが、 phpプログラム内で、どう処理させれば、表示できるのでしょうか? また、上には書きましたが、下記のように定数のクラスファイルも外部に作って、表示させることは可能でしょうか? そもそも、定数も{}で表示させることは可能なんでしょうか? もうひとつ、{$a.$b}の様に文字列の入った変数をドットでつなげると言う書き方も可能でしょうか? // main.php // <?php require_once('./class.php'); $php = 'アマガエル'; $aisatsu = 'こんにちわ。'; $php2 = '椎名アップル'; $tenki = array('晴れ','雨','曇り'); // 処理の仕方が解からないので、デタラメな?の部分です $hoge = file_get_contents('./tmp.html'); echo $hoge; // ?の部分終わり exit; ?> // main.php ここまで // // class.php // <?php class ConstTest { const CONST_TEST = '雨ですが、良い天気'; } ?> // class.php ここまで //

    • ベストアンサー
    • PHP
  • 初心者です。apache上のPHPで問題が起きまし

    た。 Ubuntu64bitです PHPをapacheで使うとソースコードが表示されて正常な処理ができません echo"のような言語構造的な簡単なものやecho file_get_contents(が動きました) しかし変数を使うとダメみたいです。 前に適当にPHPの拡張機能をパッケージからインストールしまくっていたので PHPがダメだとは思うのですが対処方法がさっぱりわかりません 両方悪い可能性も考えると初心者の手にはおえません

  • perlからphpを実行して結果を得る方法

    perlのプログラムから同一サーバー内のphpを実行してその結果を取得したいのですが、うまくいきません。 print.phpというファイルの中身が <? echo "<div>1234567890</div>"; ?> だとして、これをブラウザで見た場合のソースは <div>1234567890</div> となるわけで、この1234567890をperlのプログラム内で表示するために main.cgiというプログラム内で $data = '/***/www/print.php'; open(FH,$data); @list = <FH>; foreach $data_line ( @list ) { if ($data_line =~/<div>/ ){ $data_line =~ s/<div>//i; $data_line =~ s/<\/div>//i; print = $data_line; } } close(FH); のような処理をすると echo "1234567890"; という実行前のphpの中身が表示されてしまいます。 表示したい結果はこの場合ブラウザでphpを実行した時のソースからdivタグをperl側で抜き取った 1234567890 なのですが、同じ事をperlの書き換えで実現する上手い方法があればご教授いただけますと助かります。

    • ベストアンサー
    • CGI
  • PHPの変数展開

    いつもお世話になっております。 最近PHPを勉強し始めたのですが、どうしてもわからないことがあります。 PHPの変数に文字列を格納し、それを画面に表示したいです。 ネットを参考にしても、またネットの例文をそのまま実行しても、 PHPの変数に格納された文字列が表示されません。 どうしてなのか、さっぱりわかりません。 どうか教えてください。 <?php $colorname = "red"; echo "frame is $colornamecolor"; ?> このように記述して実行すると、画面には 「frame is 」と表示されます。

    • ベストアンサー
    • PHP
  • HTMLとPHPを分けた時の変数?について

    HTMLで値などを入力し、PHPで処理をする方法として、 ネットのサンプルソースでどの様に行われているか見たところ、 HTMLにてC言語でいう所の変数らしきものが無く、 また、PHPにも書く値に等しい変数が見受けられませんでした。 HTMLで値を入力してどの様にPHPに渡っているのか分からなかったのでご教授願いたいと思い書き込みました。 参考 eweb メールフォーム・アンケートフォーム 参考にしたソースは「Sample 1:アンケートフォーム」になります http://php.eweb-design.com/1301_mail.html 何卒宜しくお願い致します。

    • 締切済み
    • PHP
  • PHPで取得したデータの扱い

    653と申します。宜しくお願いいたします。 現在、PHPとJavaScript, HTMLを用いてDBを検索するアプリケーションを 作成中です。 ------------------------------------------------------- <?php <省略> $val1 = [あるselect文で検索されたユニークのデータ]; $val2 = [あるselect文で検索されたユニークのデータ(※上記select文と異なる)]; echo($valu1); echo($valu2);  <省略> ?> <script language="javascript"> <!-- Begin alert(<?=$value1?>); alert(<?=$value2?>); <省略> // End --> </script> <以下省略> ------------------------------------------ 上記のようなソースを書きました。 PHP内のecho関数で画面に表示させると $value1 ⇒ '950'、$value2⇒ '410'と出るとします。 この値は実際にDBに格納されているデータと同じ為、正常値と みなします。 しかしJavaScriptないのAlertで表示させると $value1 ⇒ '950'、$value2⇒ '299'と出てしまいます。 この(特に$value2)データの内容が変わってしまうのは なぜでしょうか? $value1, $value2の順番を替えても同じ結果になります。 PHPで取得したデータを格納した変数をJavaScript内で 使用するには何か特別な使用方法などがあるのでしょうか? もしくは上記の使い方が間違っているのでしょうか? ずっと悩んでます・・・(泣)

  • 文字コードを変換してHTMLのコメントに

    PHPを始めたばかりで質問の内容がお粗末ですみません。 どなたか、ご教授をお願いします。 データベースから抽出したデータをHTML上にコメントとして書き出したいと思ってます。 データベースから「あいうえお」という情報を変数を抽出して、Printするとブラウザ上では「あいうえお」と正しく表示されますが、HTMLのソース上では「あいうえお」となっています。 その情報をブラウザの「ソースコードを見る」で表示されるHTML上で「あいうえお」と表示させる方法はありませんでしょうか? どうぞ、よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpで別のファイルの変数に代入する方法

    ちょっとややこしくなりますが、よろしくお願いします。 [a.php]と[b.php]というファイルを用意します。 [a.php] ------------------ <?php echo $hogehoge ; ?> ------------------ [b.php] ------------------ <?php $hogehoge = 'hogehoge' ; require('a.php') ; ?> ------------------ という風にして結果を ------------------ hogehoge ------------------ としたいのですが、他のファイルを呼び出す時に変数を指定するにはどうしたら良いのでしょうか。 また、その際に気をつけなければならないことがあれば教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう