ホームページ  >  記事  >  バックエンド開発  >  シンプルなページバッファリング技術_PHPチュートリアル

シンプルなページバッファリング技術_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:00:38766ブラウズ

Author: limodou

まえがき
実は、技術と呼んでも本当の技術ではないのかもしれません。もちろん、これは私自身のページの処理方法であり、他の人のアイデアと一致する可能性があります。でも、やっぱり素敵な名前を付けたいですよね。では、ここで私が言っているページバッファリングとは何でしょうか?これは、動的に生成されたページを次回使用するために保存することを意味します。こうすることで、次回アクセスするときに動的に生成する必要がなくなる可能性があります。キャッシュを提供するようなものです。私の Web サイト、そしておそらくあなたの Web サイトでも、ユーザーに表示されるページが動的に生成されるように、テンプレートなどのテクノロジーが使用されています。しかし、あなたにとってこのようなページは、他の人にとっても同様である可能性があります。つまり、一定期間は変化しないでしょう。前回生成された結果が、訪問したユーザーに直接返された方がよいと思いませんか。次回?生成時間が短縮され、効率が高くなります。ウェブサイトが発展するにつれて、速度と効率の問題を依然として考慮する必要があると思います。ここで私の実装を紹介します。皆さんのお役に立てれば幸いです。それは具体的な実装のない単なるアイデアです。

使用条件
全てのWebページで使用するのがベストでしょうか?必要ないと思いますし、不可能です。バッファリングできる理由は、次のアクセスと前回のアクセスの内容が全く同じである可能性があるためです。したがって、頻繁に変更されるページには適していません。たとえば、ページにカウント情報を表示することは適切ではありません。また、動的ページを最初に変数に出力せずに、echo、print、readfile、その他の出力を使用してユーザーに直接返す場合、個人的にはまだ不可能だと思います。出力結果を取得してファイルに保存することができないためです(とにかく、私は長い間考えてきましたが、出力を切り取ってファイルにリダイレクトできるものを何も思いつきませんでした)。動的ページのより適切な処理は、出力結果を文字列に配置することです。ということで、利用条件としては、
基本的にページは変わらない
動的ページの処理結果は文字列に保存できる
動的ページの処理にはテンプレートクラスを使うと良い。テンプレートに置換可能な変数を設定し、実際の値に応じて対応するテンプレート内の変数を置換することにより、この種のテンプレート クラスの処理は、処理されたページを保存するのに非常に適しています。もちろん、テンプレートクラスを使用せずに文字列処理によって出力結果を生成することも可能です。それをどのように行うかについては議論されません。

実装
前述したように、これは実際の実装ではなく、実装のアイデアです。

処理の流れ:

アクセス要件に応じてバッファファイル名を生成
ファイル名が存在するか確認し、存在しない場合は動的ページを生成し、ページを保存し、同時に結果を出力します。終了; 存在する場合は、ステップ 3 を実行します。 ステップ 1: 統計ファイルの変更時刻、および動的ページ生成に関連するファイルの変更時刻を、他のページの変更時刻と比較します。他のページがバッファ ファイルの変更時間より大きい場合、動的結果が変更される可能性があると考えられます。その後、動的ページ結果を再生成し、ファイルに保存して結果を出力し、そうでない場合は、ステップ 5
を実行します。バッファファイルが最新であることを示し、バッファファイルを直接出力します
これは私の処理です。バッファファイルの保存方法としては、一時ディレクトリを作成する方法とデータベース処理を使用する方法があります。データベースを使用する場合は、データベースに生成時刻フィールドを追加し、この時刻フィールドを他のファイルの更新時刻と比較するなど、ファイルが最新であるかどうかを判断する方法も変更する必要があります。誰もが自分なりの方法を考えています。

私の具体的な実装例
皆さんの感覚的な理解を助けるために、ここでは私のホームページで実装したファイルベースの処理方法を示します。メイン処理コード
のみで未完成です。

------------------------------------------------ --------------------------------

1 $tmpfile="../tmp/".basename ($REQUEST_URI);
2 $tmpfile=str_replace("?", "_", $tmpfile);
4 if(file_exists($) tmpfile))
5 {
6 $cflag=false;
8 $itmp=filemtime($incfile); ($dtmp < $itmp );
10 $ctmp=filemtime(basename($PHP_SELF));
12 $ttmp=filemtime("template/content.ihtml"); 13 $cflag=$cflag | ($dtmp < $ttmp);
14 }
15 else
17
18 if(!$cflag) // 既存のファイルを使用
19 {
20 readfile ($tmpfile);
21 exit;
22 }
23
24 //新しいファイルを作成します
25 include "template.class.php3"
26
27 $fp=fopen($incfile, "r") ;
28 $content=fread($fp, filesize($incfile));
29 fclose($fp);
30
31 //テンプレートの処理は以下で行われます
32 $t = new Template("template", "keep ");
33
34 $t->set_file("contentfile","content.ihtml");
35
36 $t->set_var(
37 array(
38 "content"=>$content
39 ));
40
41 $t->parse("outputcontent","contentfile");
42
43 $fp=fopen($tmpfile, "w");
44 if($fp); 45 {
46 flock($fp, 3);
47 fwrite($fp, $t->get_var("outputcontent"));
48 flock($fp, 1);
50 }
51 $t->p("出力コンテンツ");
---------------------------- -------------------------------------------------- --
まずディレクトリ構造を紹介します:

/---bin/ 実行プログラムディレクトリ
| --content.php3 ファイル表示の処理に使用されるプログラム
|--template/ テンプレートを保存するために使用ファイルの
| |---content.ihtml テンプレートファイル
|-docs/ データファイル
|-tmp/ ストレージバッファファイル

content.php3 ファイルは動的ページを処理するために使用されます。ユーザーは、content.php3?page=id 番号を通じてデータ ファイルを読み取ることができます。具体的な方法については説明しませんが、各データ ファイルに異なる ID 番号があることがわかっていれば、content.php3?page=id 番号によってデータ ファイルを一意に識別できます。

行 1 ~ 3、一時ファイル名を生成します。 「?」、「&」、およびその他の文字を「_」に置き換えます。
4 行目、一時ファイル名が存在するかどうかを確認し、存在する場合は 18 ~ 22 行目を実行して終了します。
6-13行目、動的ページの生成に関連するファイル変更時刻と一時ファイルが更新されたかどうかを判断し、再生成フラグを設定します。ここで
filemtime() を使用して、最終変更時刻を取得します。
24 ~ 41 行目、テンプレート クラスを使用して動的な結果を生成し、それらを変数に入れます。テンプレートの加工については「テンプレート、PHPLIBの加工方法」
の記事を参考にしてください。
43行目から50行目、一時ファイルを生成します。書き込みの競合を防ぐために、ファイルはここでロックされます。
51行目、結果を出力します。

これは私が対処した方法です。ご自身で変更することもできます。

バッファリングは、アクセス速度を向上させ、システム消費量を削減できる有意義なテクノロジーです。ただし、さまざまな方法があり、誰でも自由に使用できます。






http://www.bkjia.com/PHPjc/317027.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/317027.html

技術記事

Author: limodou はじめに 実際、それはテクノロジーと呼ばれていますが、本当のテクノロジーとは言えないかもしれません。もちろん、これは私自身のページの処理方法であり、他の人のアイデアと一致する可能性があります...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。