PHP の実行効率に関しては、インターネット上に多くの特集記事がありますが、そのほとんどは PHP 陣営と Java 陣営の間での議論であり、アプリケーションの側面や実行環境が異なると、効率に大きな差が生じます。ここで言及する「大規模な」アプリケーションは、Google、eBay、Yahoo などの大規模な Web サイトの特定の実装を指すものではなく、システムがより高速かつスムーズに実行され、より多くのユーザーをオンラインでホストできることを願っています。初心者向けに PHP を少しサポートします。
ここで言及されている「大規模な」アプリケーションは、Google、eBay、Yahoo などの大規模な Web サイトの特定の実装を指しているわけではありません。読者に概念や信念を放棄するよう説得するつもりはありません。私は、すべてのシステムがより高速に実行できることを願っています。よりスムーズに、より多くのユーザーをオンラインでホストできるようになり、PHP 初心者に少しでも役立つことを願っています。
PHP の実行効率に関しては、インターネット上に多くの特集記事が存在しますが、そのほとんどは PHP 陣営と Java 陣営の議論から始まり、明確な結論が得られることはほとんどありません。実際、プログラムの実行効率を比較から導き出すのは困難です。アプリケーションの側面や実行環境が異なると、効率に大きな差が生じます。また、効率性も考慮する必要があります。アセンブリ言語は非常に低レベルであり、非常に効率的なプログラムを作成できることは誰もが知っていますが、Web 開発にアセンブリを使用し、アセンブリでプログラムを作成できる人をほとんど見たことがありません。有能なプログラマは皆の尊敬に値するようです (笑) 自分の PHP と他人の PHP の違いがわかっていれば、PHP とアセンブリの違いについて議論する必要はありません。
まず最初に、この記事の前提を明確にしておきます。仮想ホスト空間ではなく、自分で制御できるサーバーが 1 つ以上存在する必要があります。結局のところ、効率マイニングは、仮想ホスト上で実行できる汎用システム用の古典的な作品や成熟したフレームワークがすでに数多く存在しており、そのコンセプトの多くは現在の PHP ユーザーによっても継承され、開発されています。いわゆる「フレームワーク」が増えれば増えるほど、それは空の星のようなものですが、それについてはもう書きたくないのです。第一に、私自身のレベルがあまり高くなく、何も書くことができないからです。第二に、これについて書かれた記事が多すぎて、混乱が多くの情熱的な将来の天才プログラマーの死を引き起こす最大の原因です。
専用サーバー上で実行されるプログラムと仮想ホスト上で実行できるプログラムとでは、効率の最適化には大きな違いがあります。もちろん、Discuz のセットを変更せずに 1 台または複数の独立したサーバーにインストールすることもできますが、本当に最大限のパフォーマンスが最適化されるのでしょうか? 本当にこのサーバーを使用する価値があるでしょうか?
独立したサーバーとは、ユーザーがソフトウェアのインストールと削除、システム パラメーターの構成、さらにはソース コードの変更など、マシンを完全に制御できることを意味します。このようなオープン ハードウェア プラットフォームに基づいて、パフォーマンスは速度に反映されるだけでなく、セキュリティや安定性なども含まれます。仮想ホストとは異なり、ユーザーは Web サーバーのパラメーターを構成し、PHP やデータベースをインストールして構成し、あらゆる種類の厄介なもの (私が言いたいのですが) を自分でインストールする必要があり、当然、それらに対して責任を負わなければなりません。
まず、実行時間、テンプレート、データベースのカプセル化、キャッシュ、バッファ、ハッシュ、デーモン、crontab という用語をいくつか挙げてみましょう。
実行時間とは、プログラムが最初から最後まで実行されるのにかかる時間であることは誰もが知っています。 Web は一時的でステートレスであるため、実行時間は Web プログラムの実行効率の指標となります。C/S プログラムやバックグラウンド デーモン プログラムの多くは継続的に実行されるため、測定には適していません。ページの実行時間の典型的な例は、Discuz フォーラム ページの下部に表示される時間です。通常、Discuz の時間は、使用するプラットフォーム、データ量、現在のシステム負荷に応じて数ミリ秒から数十ミリ秒です。
テンプレートは誰もがよく知っていますが、多くの人はそれを使用するだけですが、なぜそれを使用するのかは知りません。テンプレートは伝統的に、MVC の上位構造において、プレゼンテーション層を下位層から分離するための手段であり、プログラマーとインターフェイス設計者の役割分担を容易にします。しかし、現在多くの場合、テンプレートの不適切な使用により、プログラマーとインターフェースデザイナーの間の分業と協力が促進されるどころか、プログラマーとアーティストの間の相互憎悪の主な原因となっています(これは前にも言ったと思います)以前の投稿)、多くの人がテンプレートの整理に多くの時間を費やさなければならないと不満を抱いています。
データベースのカプセル化は、Java に関連しているようです。これは、さまざまなデータベース システム (通常、カプセル化されたクラス) に統合された呼び出しインターフェイスを提供します。これらのクラスは、SQL チェックやフィルタリングなどのタスクも実行することがあります。 PHPLIBのDBパッケージング、PEAR DB、Adodbなどが有名で多くの人が利用しています。
キャッシュとバッファは同じもののようで、キャッシュはキャッシュ、バッファはバッファリングと呼ばれます。ハードウェアの概念では、キャッシュの目的は、レジスタとメモリ、CPU と PCI バス、IDE バスとハードディスクなど、速度の異なる 2 つのデバイスを接続することです。バッファーの本来の意味は、衝撃の衝撃を軽減または吸収するために使用されるバネ状の緩衝材です。バッファは、データを一時的に保存し、受信速度とは異なる速度で送信するために使用されるデータの事前アクセス方法です。バッファ更新方法は時間間隔に従って自動的に更新できますが、キャッシュは「ヒット率」にさらに注意を払い、現在の期間で頻繁に使用される少量のデータを高速デバイスに配置して読みやすいようにします。そして書くこと。プログラム開発では、高速デバイスや低速デバイスはありませんが、データ ソースの読み取りおよび書き込み効率が異なる場合があります。データ量が少ない場合、通常、テキスト ファイルの読み取りおよび書き込みの方がデータベース アクセスよりも効率的であり、tmpfs での同じテキスト ファイルの読み取りおよび書き込みの効率は、直接ディスク IO の効率よりも優れています。多くの場合、バッファーはプロセス通信とキューに大きく反映されます。これは、受信側が高速に読み取ることができないためではなく、高速に読み取る必要がないためです。
デーモン プロセスは、バックグラウンドで継続的に実行されるプログラムで、通常、プロセスの監視、制御、および外部サービスの提供を行います。たとえば、Apache 自体はデーモン プロセスとして理解できますが、実際には頻繁に更新される多数のプロセスで構成されています (メイン プロセスは固定されています)。
Crontab は、UNIX/Linux のスケジュールされたプログラムで、Windows の「スケジュールされたタスク」に似ており、特定のプログラムを実行するために特定の時間間隔または特定の時点を設定します。通常、自動更新の完了、一時データのクリア、および一定期間に 1 回自動的に実行されるその他の操作に使用されます。
もう 1 つの特別な概念 (特に一般的なシステム開発に慣れている人にとって) は、独立したサーバーを用意した後は、知らず知らずのうちにシステムのマスターになると、PHP が提供できる機能に自分自身を制限する必要がなくなるということです。これを実現するためには努力しなければなりません。私たちが使えるものはたくさんあります。 PHP は全能ではなく (これは確かです)、その機能的な欠点は Perl によって完全に補うことができます。一般的な言語として、Perl はより多くの機能的なオプションを提供でき、そのモジュールは根性と同じくらい密度が高く、カジュアルで変態的な言語は無限の機能を提供します。エネルギー。 PHP のパフォーマンスの欠陥は、C を使用して補うことができます。 PHP の基礎は C から継承されています。PHP 自体も C によって開発されています。PHP を拡張するために C を使用することは完全に合理的です。
Linux 自体は C と Perl でサポートされています (これは Perl の状況を誇張するために言ったわけではありません。標準 Linux に Perl スクリプトがどれだけあるのかを見て、システムが Perl なしでは障害者のように感じられるかどうかを確認してください)。 PHP は構文の大部分を C から継承し、Web の機能、関数、およびオープンソースに矛盾すると思われる「$」記号のほとんどを Perl から学習しました (PHP は初期の Perl スクリプトでした)。
私が使用しているコードの一部を分析してみましょう (注: Linux スタンドアロン サーバーに適用されます。私は Windows と仮想ホストの大規模な開発を長い間諦めていたようです)。おなじみの方法、なじみのない方法、または異常な方法がいくつか使用されています。私のシステムは RedHat AS3 で、特別なことは何もありません。PHP のバージョンは 4.4.0、MySQL は 4.1 です。本当に必要な場合を除き、PHP5 の新機能を使用しなければならないコードを意図的に書くことはありません。
私の Web ルート ディレクトリは /www の下にあります。Apache と PHP はデフォルトで /usr/local/ の下にインストールされます。MySQL はダウンロードしてコンパイルされたバイナリ バージョンであり、そこに残しておきます。テスト用なので乱雑にはしたくない 実際のプロジェクトでは、特に複数のサーバーを使用する場合は、システムをうまくデプロイする必要があります。
システムの構造を明確にするために、使用する必要のあるすべてのファイルを 2 番目のディレクトリに置きます。
以下は、共通ヘッダー ファイル /includes/kernel/common.inc.php の一部のスニペットです
。
if (!define('IN_BSG')) {
出口;
}
?﹥
上記のコードは、正規のプログラムによってのみ呼び出すことができ、他のファイルにはインクルードされないことを保証します。実行中のプログラムが「IN_BSG」定数を定義していない場合、この common.inc.php をインクルードした後にプログラムは終了します。
﹤?php
list($usec, $sec) =explode(" ", microtime());
$page_time_start = $usec + $sec;
?﹥
プログラムの実行開始時間を計算するために使用されるこれら 2 つの行は誰もがよく知っているかもしれません。プログラムの実行にかかった時間を調べるために、プログラムが終了する前に再計算されます。これを気にしない場合は、コメントアウトしても問題ありません。