PHP Web サイトのパフォーマンスを変更する方法: 1. HTML を静的化する; 2. 画像サーバーを分離する; 3. データベースのクラスタリングとテーブルのハッシュを実行する; 4. キャッシュを設定する; 5. ミラーを構築する; 6. 6. 負荷分散テクノロジーの使用 7. コード記述の最適化など
このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。
PHP Web サイトのパフォーマンスを変更するにはどうすればよいですか?
大規模な PHP Web サイトのパフォーマンスと同時アクセスの最適化ソリューション
Web サイトのパフォーマンスの最適化は、大規模な Web サイトにとって非常に重要です。Web サイトのアクセス開始速度はユーザーに影響します。経験上、Web サイトのアクセス速度が遅いと直帰率が高くなりますが、小規模な Web サイトの場合は簡単に解決できますが、大規模な Web サイトの場合、列が多く、写真や画像も大きいため、全体のパフォーマンスを最適化するにはどうすればよいでしょうか。
1. 大規模な Web サイトのパフォーマンスを向上させるための戦略
1. 静的 HTML
実際、最も効率的で消費量の少ない方法であることは誰もが知っています。は純粋な静的 HTML ページであるため、Web サイトのページには静的ページを使用するよう最善を尽くしていますが、この最も単純な方法が実際には最も効果的な方法です。
2. 画像サーバーの分離
ご存知のとおり、Web サーバーの場合、Apache、IIS、その他のコンテナーのいずれであっても、画像が最も多くのリソースを消費するため、画像をページから分離する必要があります。分離は基本的に大規模な Web サイトで採用される戦略であり、すべての Web サイトが独立した、または複数の画像サーバーを持っています。このようなアーキテクチャにより、ページ アクセス リクエストを提供するサーバー システムへの負荷が軽減され、画像の問題によるシステムのクラッシュを確実に防ぐことができます。アプリケーション サーバーとイメージ サーバーでは、さまざまな構成の最適化を実行できます。たとえば、ContentType を構成する場合、Apache はできるだけ少ない LoadModules をサポートして、より高いシステム消費量と実行効率を確保できます。
3. データベース クラスター、ライブラリ テーブル ハッシュ
大規模な Web サイトには複雑なアプリケーションがあり、これらのアプリケーションではデータベースを使用する必要があり、大量のアクセスに直面すると、データベースのボトルネックが急速に増大します。 1 つのデータベースではすぐにアプリケーションを満たすことができなくなることがわかり、データベース クラスタリングまたはデータベース テーブル ハッシュを使用する必要があります。
データベース クラスターに関しては、多くのデータベースが独自のソリューションを持っており、MySQL が提供する一般的に使用されるマスター/スレーブも同様のソリューションです。
クラスターは通常、CDN、GSBL、および DNS 負荷分散テクノロジーを使用します。各リージョンにはフロントエンド サーバー グループがあります。例: NetEase と Baidu は DNS 負荷分散テクノロジーを使用します。各チャネルにはフロントエンド サーバーのグループがあります。 1 回の検索 DNS ロード テクノロジーを使用して、すべてのチャネルがフロントエンド サーバー クラスターを共有します。
ライブラリ テーブルのハッシュは、一般的に使用され、最も効果的なソリューションです。
ビジネス モジュールとアプリケーション モジュール、または機能モジュールをアプリケーションにインストールしてデータベースを分離します。異なるモジュールは異なるデータベースまたはテーブルに対応し、特定の戦略に従って特定のページまたは機能をより小さなデータベースに分散します。列、ユーザーテーブルなどはユーザーIDに応じてハッシュ化されるため、低コストでシステムのパフォーマンスを向上させることができ、優れたスケーラビリティを備えています。
Sohu のフォーラムは、フォーラムのユーザー、設定、投稿などの情報をデータベースに分離し、データベースとテーブルのセクションと ID に従って投稿とユーザーをハッシュする構造を採用しています。ファイル内で簡単に構成できるため、いつでもシステムに低コストのデータベースを追加して、システムのパフォーマンスを補うことができます。
4. キャッシュ
テクノロジーの分野で働く人なら誰でもキャッシュという言葉に出会ったことがあるでしょうし、キャッシュはさまざまな場所で使用されています。 Web サイトのアーキテクチャおよび Web サイト開発におけるキャッシュも非常に重要です。ここではまず、最も基本的な 2 つのキャッシュについて説明します。高度な分散キャッシュについては後で説明します。アーキテクチャにおけるキャッシュに関しては、Apache に精通している人なら誰でも、Apache が独自のキャッシュ モジュールを提供していることを知っているでしょうし、追加の Squid モジュールをキャッシュに使用することもできます。どちらの方法も Apache のアクセス応答機能を効果的に向上させることができます。
Web サイトのプログラム開発におけるキャッシュには、Linux で提供される Memory Cache が Web 開発でよく使用されるキャッシュ インターフェイスです。たとえば、Java で開発する場合、MemoryCache を呼び出して一部のデータをキャッシュして共有できます。 . 、一部の大規模コミュニティではそのようなアーキテクチャが使用されています。また、Web 言語開発を使用する場合、基本的に各言語には独自のキャッシュ モジュールとメソッドがあり、PHP には Pear のキャッシュ モジュールがあり、Java にはさらに多くのモジュールがあります。.net についてはあまり詳しくありませんが、きっとあるはずだと思います。
5. ミラーリング
ミラーリングは、パフォーマンスとデータ セキュリティを向上させるために大規模な Web サイトでよく使用される方法であり、ネットワーク アクセス プロバイダーや地域の違いによって生じるユーザーのアクセス速度の違いを解決できます。たとえば、ChinaNet と EduNet の違いにより、多くの Web サイトが教育ネットワーク内にミラー サイトを構築するようになり、データは定期的またはリアルタイムで更新されます。
6. 負荷分散
負荷分散は、大規模な Web サイト向けのハイエンド ソリューションで、高負荷のアクセスと多数の同時リクエストを解決します。負荷分散テクノロジーは長年にわたって開発されており、選択できる専門的なサービス プロバイダーや製品が数多くあります。
2. PHP コード記述の最適化:
1. Echo は print よりもはるかに高速です。
どちらのメソッドもページ上に何かを印刷しますが、echo は値を返さず、print は成功または失敗に応じて 0 または 1 を返します。
2. include_once は include よりも時間がかかります。
インクルードしたいクラスがインクルードされているかどうかを確認する必要があるため。
3. 長い段落文字列には二重引用符ではなく必ず一重引用符を使用してください。
二重引用符は文字列内の変数を検索するためです。例: echo ‘This is long string’.$name は echo ‘This is long string $name’ よりもはるかに高速です。
4. ループ内にネストされた for ループを使用しないでください
5. 関数を静的に定義できる場合は、それをメンバー関数として定義しないでください。静的関数は、静的関数よりも 33% 高速です。メンバー関数です。
6. 正規表現を使用せずに問題を解決できる場合は、正規表現を使用しないでください。
正規表現は、PHP のネイティブ関数よりも遅くなります。たとえば、preg_replae の代わりに str_replace を使用します。
7. ファイルを含めるには相対パスを使用しないようにしてください
相対パスでファイルを検索する場合は、現在のディレクトリで検索し、その後、順番に再度検索します。これにより、ファイルの検索が非常に遅くなります。最初に WEB_ROOT のような定数を定義し、次にこの定数を使用してファイルをインクルードすることをお勧めします。
8. 合同記号 === は等号 ==
より高速です そして、if(1 == '1') は true を返し、if(0 == ”) も同様に返します合同記号を使用すると、if(1 ==='1') と if(0===”) は両方とも false を返します。したがって、プログラム内でいくつかのブール変数を検出する必要がある場合は、合同記号を使用するのが最善です。
3. thinkphp
1. デバッグ モードをオフにする
デバッグ モードをオフにすると、システムがプロジェクトのコンパイル キャッシュが自動的に生成され、ログの書き込みがオフになります。これにより、多くの IO 読み込みとログ書き込みのオーバーヘッドが削減されます。
2. ページ圧縮出力をオンにする
バージョン 3.1 以降、ページ圧縮出力を制御するために OUTPUT_ENCODE 構成パラメーターが追加されました。
3. キャッシュをオンにする
Web サイト展開環境に APC または Xcache キャッシュをインストールすると、Web サイトのパフォーマンスとメモリ使用量を効果的に改善できます。XCache はオープンソースのオペコード キャッシュ/オプティマイザーです。サーバー上の PHP のパフォーマンスを向上させます。コンパイルされた PHP データを共有メモリにバッファリングすることで、コンパイル プロセスの繰り返しを回避し、バッファされたコンパイル済みコードを直接使用して速度を向上させることができます。通常、ページの生成速度が 2 ~ 5 倍向上し、ページ生成速度が向上します。 Alternative PHP Cache (APC) は、オペコードの PHP 中間コードをキャッシュできる、PHP に有効なオープンソースのキャッシュ ツールです。
4. フィールド キャッシュ
デフォルトでは、フィールド キャッシュは自動的に生成されます。開発が完了した後は、基本的にデータベースへの変更が少なくなるため、フィールド キャッシュを対応する Model クラス。これにより、毎回フィールド キャッシュを読み取る IO オーバーヘッドを削減できます。マージの方法は、Runtime/Data/_fields
4 で対応するフィールド キャッシュ ファイルを見つけることです。データベースの最適化
1. 正しいストレージ エンジンを選択します
MySQL を例に挙げると、MySQL には MyISAM と InnoDB という 2 つのストレージ エンジンが含まれており、それぞれのエンジンには長所と短所があります。 MyISAM は、大量のクエリを必要とするアプリケーションに適しています。 InnoDB の傾向は非常に複雑なストレージ エンジンとなり、一部の小規模なアプリケーションでは MyISAM よりも遅くなるでしょう。ただし、「行ロック」とトランザクションはサポートされています。
2. フィールドのデータ型を最適化する
列が小さいほど高速になるという原則を覚えておいてください。ほとんどのデータベース エンジンにとって、おそらくハードディスク操作が最も重大なボトルネックとなります。したがって、データをコンパクトにすると、ハード ドライブへのアクセスが減るため、この状況では非常に役立ちます。テーブルに数列しかない場合 (ディクショナリ テーブル、構成テーブルなど)、主キーとして INT を使用する理由はなく、MEDIUMINT、SMALLINT、またはより小さい TINYINT を使用する方が経済的です。時間を記録する必要がない場合は、DATETIME よりも DATE を使用する方がはるかに適切です。もちろん、拡張のための十分な余地も残しておく必要があります。
3. 検索フィールドにインデックスを追加します
3. 検索フィールドにインデックスを追加します
### ######3. インデックス付けは、必ずしも主キーや唯一のフィールドを意味するわけではありません。テーブル内に常に検索に使用するフィールドがある場合は、そのフィールドにインデックスを作成することをお勧めします。検索するフィールドが大きなテキスト フィールドでない場合は、フルテキスト インデックスを作成する必要があります。 ######4. Select の使用を避ける * データベースから読み取られるデータが増えるほど、クエリが遅くなります。 ###また、データベース サーバーと WEB サーバーが 2 つの独立したサーバーである場合、ネットワーク送信の負荷も増加します。データ テーブル内のすべてのフィールドをクエリする場合でも、* ワイルドカード文字は使用しないでください。組み込みのフィールド除外定義をうまく活用すると、より便利になる場合があります。
5. VARCHAR の代わりに ENUM を使用します
ENUM 型は非常に高速でコンパクトです。実際には、TINYINT を保持しますが、文字列として表示されます。このようにして、このフィールドを使用して選択リストを作成するのが非常に完璧になります。たとえば、性別、民族、部門、ステータスなどのフィールドの値が限定されており、固定されている場合は、VARCHAR ではなく ENUM を使用する必要があります。
6. 可能な限り NOT NULL を使用してください
NULL 値を使用する特別な理由がない限り、フィールドは常に NOT NULL にしてください。 NULL は実際には余分なスペースを必要とするため、比較を実行するとプログラムがより複雑になります。もちろん、これは NULL を使用できないという意味ではなく、実際は非常に複雑であり、NULL 値を使用する必要がある状況が依然として存在します。
7. 固定長テーブルは高速になります
テーブル内のすべてのフィールドが「固定長」の場合、テーブル全体が「静的」または「固定長」とみなされます。たとえば、テーブルには VARCHAR、TEXT、BLOB 型のフィールドはありません。これらのフィールドのいずれかを含めている限り、テーブルは「固定長の静的テーブル」ではなくなり、MySQL エンジンは別の方法でテーブルを処理します。
固定長テーブルを使用すると、MySQL の検索が高速になるため、パフォーマンスが向上します。これらの固定長により、次のデータのオフセットの計算が容易になるため、読み取りも自然に高速になります。また、フィールドが固定長でない場合、次のフィールドを検索するたびに、プログラムは主キーを検索する必要があります。
さらに、固定長テーブルはキャッシュや再構築も容易です。ただし、唯一の副作用は、固定長フィールドは使用するかどうかに関係なく非常に多くのスペースを必要とするため、固定長フィールドによってスペースが浪費されることです。
8.「垂直分割」テクノロジーを使用する
テーブルを 2 つに分割し、1 つは固定長、もう 1 つは可変長にすることができます。垂直分割 「垂直分割」は、データベース内のテーブルを列ごとに複数のテーブルに変換する方法です。これにより、テーブルの複雑さとフィールドの数が軽減され、それによって最適化の目的が達成されます。例: User テーブルに自宅住所というフィールドがあります。このフィールドはオプションです。これに比べて、データベースで操作する場合の個人情報を除いて、このフィールドを頻繁に読み取ったり書き換えたりする必要はありません。それで、それを別のテーブルに入れてみませんか?これにより、テーブルのパフォーマンスが向上します。よく考えてください。ユーザー テーブルの場合、ユーザー ID、ユーザー名、パスワードしかありません。ユーザー ロール、などが頻繁に使われることになります。テーブルが小さいほど、常にパフォーマンスが向上します。また、この分割されたフィールドで構成されるテーブルを頻繁に結合しないと、分割していない場合よりもパフォーマンスが低下し、極端なレベル低下が発生するので注意が必要です。
9. SELECT クエリの EXPLAIN
EXPLAIN キーワードを使用すると、MySQL が SQL ステートメントをどのように処理するかを知ることができます。これは、クエリ ステートメントまたはテーブル構造のパフォーマンスのボトルネックを分析するのに役立ちます。 EXPLAIN のクエリ結果には、インデックスの主キーがどのように使用されるか、データ テーブルがどのように検索および並べ替えられるかなどもわかります。通常、より複雑な SELECT ステートメント、特に複数のテーブルを含むステートメントの先頭にキーワード EXPLAIN を追加できます。これを行うには phpmyadmin を使用できます。
5. フロントエンドの最適化
バックエンドとデータベースを最適化した後、次に行う必要があるのは、フロントエンド ページとリソースの最適化です。出力ページ用のファイル。主に画像、JS、スタイル ファイルの最適化が含まれます。検出と分析には、次の Web ページ パフォーマンス テスト ツールを使用することをお勧めします。また、関連する最適化の提案が提供されます。
PageSpeed Google によって開発されたツール
開発者は PageSpeed を使用できます。 Web ページのパフォーマンスを評価し、パフォーマンスを向上させる方法についての提案を得ることができます。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHP Webサイトのパフォーマンスを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。