ホームページ  >  記事  >  php教程  >  シンプルなページバッファリングテクノロジー

シンプルなページバッファリングテクノロジー

WBOY
WBOYオリジナル
2016-06-21 09:04:13989ブラウズ
著者: limodou

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

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

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

処理の流れ:

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

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

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

1 $tmpfile=" ../tmp/".basename($REQUEST_URI);
2 $tmpfile=str_replace("?", "_", $tmpfile);
3 $tmpfile=str_replace(" &", "_" , $tmpfile);
4 if(file_exists($tmpfile))
5 {
6 $cflag=false;
7 $dtmp=filemtime($tmpfile);
8 $itmp =filemtime($incfile);
9 $cflag=$cflag | ($dtmp < $itmp);
10 $ctmp=filemtime(basename($PHP_SELF)); >11 $cflag=$ cflag | ($dtmp < $ctmp);
12 $ttmp=filemtime("template/content.ihtml");
13 $cflag=$cflag | $ttmp);
14 }
15 else
16 $cflag=true;
17
18 if(!$cflag) // 既存のファイルを使用します
19 {
20 readfile($tmpfile );
21 exit;
22 }
23
24 //新しいファイルを作成します
25 include "template.class.php3"; 🎜>27 $fp =fopen($incfile, "r");
28 $content=fread($fp, filesize($incfile));
29 fclose($fp); 🎜>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); >49 fclose($fp);
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行目、結果を出力します。

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

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





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