PHPのechoとob_startと自前バッファ出力の速度比較IT系おじさんのチラシの裏2018年10月~プロフィールAUTHOR:とっちら書きたくなったときに書きたいことを書く雑記ブログ。IT系のネタが多いかも知れません。11:57とっちら1年前の記事に助けられました。14:28とっちらこの記事のお陰で60分録画できるようになりました。16:01とっちらライセンスを明示して貰えると使いやすいのですが。14:37ご回答いただきどうもありがとうございます。21:56とっちら超初心者です。System)的な作り方をすることも多いと思います。...フレームワーク使ってる人は知りませんよ?ぼくPHPのフレームワークって苦手なんです。仕事で仕方なく使うケースもなくもなくもないですが、出来ることなら避けたい。そもそもPHP自体がフレームワークじゃないですか。言語自体がテンプレートエンジンとなっているのに、なにゆえその上に重たいクラスだのなんだのを載せたがるのか。...と、そんなぼくの主義主張はともかく、元となる静的なテンプレート用HTMLを読み込み、動的に生成されたコンテンツを結合する際、文字列でアレコレやる方法もあればob_startで出力バッファを溜め込んでアレコレやる方法もあると思うんです。今回はその速度を比較してみよう、というお話。前置きではわかりづらかった気もするので、ざっくりとした例を挙げておきます。'template.php';?>解説template.phpでは全ページ共通のメニューを配置しています。content1.phpとcontent2.phpはそれぞれのコンテンツをセットしてからtemplate.phpを呼び出す動作。一口にテンプレートを用意してコンテンツと結合させる、といってもいくつかの方法があり、中でも自前でバッファを作るパターン(content1のパターン)とob_startに任せるパターン(content2のパターン)は比較的メジャーなんじゃないかなーと思います。なんとなーく経験的に前者のほうが早そうと思って使っていますが、実際に計測したことはなかったので今回それを計測していきます。sec.';テスト環境はWindows10上で動作するnginx+PHP7.4.7です。'</textarea></body></html>';}"テストテストテストテストテスト"という文字列を1万行出力するだけのコードです。sec.当然ですが、逐一echoするよりもかなり早い。sec.おぅふ...。ob_startより遅い。まとめテンプレートエンジンがどうたらこうたらと前置きしましたが、要するにechoとob_startと自前バッファの速度比較でした。sec.ということで、ob_startにバッファリングを任せるよりも自前で変数を用意してバッファリングしたほうが早い、という結果になりました。ある意味当たり前ですかね?でもでも、そうじゃないかなー?と思っていても実際に試すまでは安心して使用できないので試してみて良かったと思っています。自前バッファを配列にしたパターンですが、これは過去に文字列操作が苦手な言語で痛い目にあったことがあるためです。Basicって言うんですけどね...。文字列に文字列を加算するたびに何やら裏で操作をしているようでどんどんパフォーマンスが低下していくの。それに比べると配列に蓄えたほうが圧倒的に早かったので、VB使っていた頃はバッファ変数にはもっぱら配列を使用していました。古い頃のVBですし、今は問題ないと思いますが、PHPではどうかなー?と思って試したんですね。文字列に文字列をどんどん追加するだけの操作でもPHPは余計なことをしていないようで十分な速度が出て一安心。今後も自前でバッファを作って、テンプレートとコンテンツを合体させるCMSを作ろうと思いました。以上、何かの参考になれば幸いです。最近、「curl_multiは確かに爆速だった(がcurl_multi_selectのバグでハマった)」の記事へのアクセス数が増えていたので別のトラブル事例も紹介しておきます。昨日は「データベースの同期処理(レプリケーション)に関する昔話」と題しておっさんの昔話に花を咲かせてしまいましたが、今回の記事が本題です。コメント投稿直後ならコメントの編集/削除が可能です。※24時間経過するか、新しく投稿した場合は古い投稿の編集や削除は出来ません。※ブラウザでCookieが受け入れられない場合はこの機能は使えません。非公開にチェックを入れたコメントは管理人のみ閲覧できます。コメント投稿のガイドライン誰もが閲覧できるコメント欄ですので個人が特定できる情報等は書き込まないようにしましょう。他人のHPやブログの文章を掲載する場合は著作権法第32条「引用」の条件を満たすかご確認ください。誹謗中傷にあたる表現などは場合によっては法的な責任を問われる可能性があるためご注意ください。とっちらか~るTOP。