大規模なPHPサイトのパフォーマンスと同時アクセスの最適化

ウェブサイトのパフォーマンスの最適化は、そのサイトの大部分のためにより多くの写真や画像に、小規模なサイトへの良い解決策を高い直帰率の原因となりますサイト訪問が遅い、ユーザーエクスペリエンスに影響を与えるWebサイトの開放速度を訪問し、大規模なサイトのために非常に重要ですそして、彼らはどのようにそれの全体的なパフォーマンスを最適化するために、比較的大きいですか?この記事では、大規模なPHPのサイトのパフォーマンスとあなたのための同時アクセスの最適化ソリューションを提供します。

 

まず、大規模なサイトでは、パフォーマンス戦略を改善します:

高いだけでなく、高性能サーバ、高性能データベース、効率的なプログラミング言語の使用、:などのポータルなどの大規模なサイトでは、ユーザー・アクセス、高い同時要求の数が多いの顔に、基本的な解決策は、こののいくつかの側面に焦点を当てましたWebコンテナのプロパティ。これらのソリューションは、ある程度大きな投資を意味します。

コンテナは、Webサービスプログラムで、サーバー上のポートがあり、サービスプログラムを提供し、このプログラムは、JAVA Tomcatコンテナなどのクライアントからの要求を処理するためにある、ASPは、IISまたはPWSであるような容器は、 。複数の容器は、サーバとすることができます。

1、HTML静的

実際には、我々はすべて、最高の効率を知って、消費量は純粋な静的なHTMLページの最小であるので、我々は最も簡単な方法は、実際に最も有効な方法であることを実現するために静的なページを使用して、当社のサイトのページを作ってみます。

図2に示すように、画像サーバ分離

ご存知のように、Webサーバは、それは、Apache、IISまたは他の容器であるかどうか、画像が最もリソースを消費するがあるので、我々は基本的に大規模なサイトは、彼らが持っている、戦略を採用するある画像ページから分離する必要があります独立した、でも多くの画像サーバプラットフォーム。このアーキテクチャは、サーバシステムは、ページアクセス要求の圧力を減らすことができ、及びシステムは、画像の問題が崩壊しないことを保証することができます提供します。

アプリケーションサーバと画像サーバ上で、異なる構成を最適化することができ、例えば、より高いシステムの消費と効率を確保するためのLoadModuleのできるだけ、時間の支持のApache設定のContentType限り少なくすることができます。

3、データベースクラスタリング、データベーステーブルハッシュ

大規模なサイトでは、これらのアプリケーションは、その後、頻繁にアクセスさに直面して、データベースを使用する必要があり、複雑なアプリケーションであり、データベースのボトルネックは、データベースがすぐにアプリケーションを満たすことができなくなり、すぐに明らかにされるので、我々はデータベースを使用する必要がありますクラスタハッシュテーブルまたはライブラリ。

データベースクラスタの面では、多くのデータベースには、独自のソリューションは、マスター/スレーブの人気MySQLはまた、同様のプログラムを提供しています。

クラスタは、通常、DNS負荷分散技術とCDNとGSBLを使用し、各地域グループ内のフロントエンドサーバーのグループ、例えば:網易は、BaiduはDNS負荷分散技術を使用し、各チャンネルは、フロントエンドサーバーのセットがあり、DNSロード技術を使用して検索、すべてのチャンネルは、サーバのフォアグラウンドクラスタを共有しています。

ライブラリのテーブルのハッシュは、一般的に使用され、最も効果的なソリューションです。

我々は、異なるモジュールが異なるデータベースまたはテーブルに対応し、機能モジュールを分離するために、アプリケーションとビジネスアプリケーションやデータベースをインストールし、その後、そのようなユーザ・テーブルとしてページや機能上の特定の戦略も小さいハッシュデータベースによれば、低コストでリフトシステムのように、性能、ハッシュテーブルのユーザーIDに基づいて行われ、優れた拡張性を備えています。

捜狐は、フォーラムは、構成ファイル内のプレートとID、最終的に簡単な構成に応じて、データベースとテーブルをハッシュするデータベース別のポストに、このような構造は、ユーザフォーラム、設定、および他の情報を使用して、ユーザをポストすることですそれは、低コストのサプリメントを追加し、いつでもシステムは、データベース・システムのパフォーマンスに来ることができます。

4、キャッシュ

用語テクノキャッシュは、キャッシュを使用するための多くの場所にさらされています。キャッシュでのウェブサイトのアーキテクチャとWeb開発も非常に重要です。ここでは、2つの基本的なキャッシュを指示します。後ろに高度かつ分散キャッシュ。

Apacheは、独自のキャッシュモジュールを提供してApacheの人々へのキャッシュアーキテクチャは、追加のイカモジュールのキャッシュを使用することができ、より身近知ることができ、いずれかの方法が効果的にApacheのアクセス応答性を向上させることができます。

Java(登録商標)のように、Linuxのメモリキャッシュで利用可能なWebキャッシュのアプリケーション開発の側面、共通キャッシュ・インターフェースである、Web開発で使用することができ、あなたは、いくつかのデータ・キャッシングと通信を共有するいくつかの大規模なコミュニティの使用をMemoryCacheを呼び出すことができますこのアーキテクチャ。ウェブ言語の開発を使用する場合に加えて、基本的な言語の多様性は、独自のキャッシュモジュールとメソッドを持っている、PHP梨は、キャッシュモジュールを持っている、Javaはさらに、.NETは非常に精通していない、私はそれは間違いなくそこにあると考えています。

5、ミラー

ミラーリングは、それが中に多くのサイトを促し、そのようなCHINANETとEduNetの違いなどのネットワーク・アクセス・プロバイダーを、ユーザーアクセス速度の違いに対処し、地理もたらすことができる技術をミラーリング、しばしば大規模なサイトで使用される安全性とパフォーマンスのデータを改善する方法でありますミラーサイト、教育ネットワークタイミングの更新やライブアップデート内のデータを設定します。

6、ロード・バランシング

ロードバランシングは、高負荷およびハイエンドのソリューションを使用して同時要求の数が多いアクセス対処する大規模なサイトです。

長年にわたって開発負荷分散技術は、から選択する多くのプロのサービスプロバイダーや製品がありますが、私は個人的にあなたの参照アーキテクチャを与えることができるそのうちの2つのソリューションの数を、連絡しました

二、PHPのコーディングの最適化:

1.プリントよりもはるかに高速エコー。

印刷が成功または失敗した場合に0または1を返しますが、どちらの方法でも、ページ上で何かを印刷しますが、エコーは、任意の値を返しません。 

2.のinclude_onceより多くの時間がかかるが含まより。

それはあなたがクラスが含まれている含めるかどうかを確認する必要があるため。  

長い文字列の段落の3は、単一引用符の代わりに二重引用符を使用する必要があります。

二重引用符は、文字列変数を検索するため。たとえば:エコーより$名「これは長い文字列である」エコー「これは長い文字列$名である」はるかに高速です。

4.リサイクルループのネストされた使用しないでください。  

前記関数は、静的として定義することができる場合

次いで、33%速いメンバ関数よりメンバ関数が定義され、静的関数になりません。  

あなたが渡すことができない場合6.正規表現は、問題を解決することができます

その後、定期的に使用しないでください。PHPのネイティブ機能よりも遅い正規表現。

例えば、str_replaceはpreg_replaeを置換しました。 

7.ファイルを含めるように相対パスを使用しないでください。

見つけるために、再び電源を入れ、その後現在のディレクトリを検索します相対ファイルパスを検索し、そして。このファイルを見つけることは非常に遅いです。最高のは、その後、そのような定数WEB_ROOTを定義するファイルを含めるには、この定数を使用することです。  

8.合同高速シンボルと等しい== ===

そして、(1 == '1')(0 ==「)場合は、trueを返すもtrueを返すと、(1 === '1')場合は、合同の記号を使用する場合であれば、そして(0 =の場合==「)はfalseを返します。だから、あなたはそれが一致記号を使用するのが最適であるとき、プログラム内のブール変数の数を検出する必要がある場合。  

第三に、thinkphpのためのいくつかの方法があります

1.デバッグモードをオフにします

デバッグモードを閉じた後、システムが自動的にコンパイルので、IO負荷の多くのオーバーヘッドを削減、ログバッファが書かれている閉じてログインするためのプロジェクトを生成するので書き込みます。

2.ページ出力の圧縮をオンにします

3.1バージョンでは、ページ出力の圧縮を制御するためのOUTPUT_ENCODE設定パラメータを追加します。

3.ターンキャッシュ

APCのWebサイトデプロイメント環境のインストールやXCacheとキャッシュで効果的に運用パフォーマンスとメモリフットプリントのウェブサイトを向上させることができます

XCacheとは、彼があなたのサーバー上のPHPのパフォーマンスを向上させることができることを意味し、オープンソースのオペコード・キャッシュ/オプティマイザ、である。彼は、コンパイルプロセスの重複を避けるために、PHPの共有メモリをコンパイルバッファされたデータを渡され、直接バッファを使用することができましたこれにより、コンパイルされたコードの高速化を図っている。一般的には、2〜5倍のあなたのページの生成速度を向上させるには、サーバーの負荷を軽減することができます。

代替のPHPキャッシュ(APC)は、オペコードPHPのミッドアンブルをキャッシュすることが可能で、PHPのキャッシュ記憶手段のための効果的なオープンです。

4.キャッシュフィールド

デフォルトでは、キャッシュは自動的にフィールドを生成され、開発が完了した後、実質的にデータベースが比較的小さくなり変化し、各読み取りオーバーヘッドフィールドバッファIOを低減することができるので、モデルクラスに対応するフィールドバッファをマージすることも考えられます。組み合わせた方法は、ランタイム/データ/ _fields次キャッシュファイル内の対応するフィールドを見つけることです

第四に、データベースの最適化

1、正しいストレージエンジンを選択します

MySQLへの、例えば、各エンジンのためのMyISAMとInnoDBの含む二ストレージエンジン、利点と欠点の両方があります。

クエリの多数を必要とするいくつかのアプリケーションに適しMyISAMテーブル。InnoDBの傾向は、いくつかの小さなアプリケーションのために、それはMyISAMテーブルよりも遅くなり、非常に複雑なストレージエンジンになります。しかし、それは、トランザクションをサポートするために、「行ロック」をサポートしています。

図2は、フィールドのデータタイプを最適化します

原則として、コラム速く小さいです。ほとんどのデータベースエンジンの場合、ディスク操作は、おそらく最も重要なボトルネックとなっています。だから、あなたのデータがコンパクトになり、それがハードディスクへのアクセスを減らすため、これは、非常に便利です。

あなただけ(たとえば、ディクショナリ表のように、構成テーブル)テーブルベールの数の列を持っているなら、私たちはINTキーを使用してショットを呼び出す理由はない、MEDIUMINT、SMALLINT TINYINT以下を使用して、より経済的になります。あなたはDATEより良いDATETIMEを使用して、時間を記録していない場合。もちろん、あなたも拡張のための十分な十分な余地を残しておく必要があります。

3、検索フィールド用のインデックスを追加

インデックスは、必ずしも主キーまたは一意のフィールドではありません。あなたのテーブルには、あなたは常に頻繁に検索を行うために使用されるフィールドを持っている必要があれば、それはより良いインデックスである、あなたはフィールドを検索する場合を除き、大きなテキストフィールドです、それはフルテキストインデックスを作成する必要があります。

4、選択*の使用を避けるには、データベースからのより多くのデータを読み込みます

その後、クエリが遅くなります。そして、データベースサーバーとWebサーバーに2台の別々のサーバがある場合、それはネットワークの負荷が増加します。あなたは、データテーブルを照会するだけでなく、*ワイルドカードを使用しないように試してみたいでも、すべてのフィールド場合は、組み込みのフィールドを提供トラブルシューティングの定義は、より利便性を与えることがあります。

図5に示すように、代わりのENUM VARCHARを使用して

ENUMタイプは、非常に高速でコンパクトです。実際には、その保存はTINYINTですが、文字列として番組にその外観。その結果、オプションのリストの一部を行うには、このフィールドを使用することは非常に完璧になります。例えば、性別、民族性、および限られた固定の状態部門のように、これらのフィールドの値が、その後、あなたの代わりにVARCHARのENUMを使用する必要があります。

6、NOT NULLを使用して、可能な限り

あなたはNULL値を使用するために非常に特別な理由がない限り、あなたは常にあなたのフィールドがNOT NULLを保持しておく必要があります。NULLは、実際に余分なスペースを必要とし、あなたが比較すると、あなたのプログラムはより複雑になります。もちろん、これはあなたがNULLを使用できないことを意味するものではありません、現実は非常に複雑で、まだいくつかのケースでは、あなたはNULL値を使用する必要があります。

図7に示すように、固定長テーブルが速くなります

テーブルのすべてのフィールドが「固定長」である場合、テーブル全体が「静的」または「固定長」であると考えられます。例えば、以下の表は、フィールドのないタイプではない:VARCHAR、TEXT、BLOB。限り、あなたはこれらのフィールドのいずれかが含まれて、その後、テーブルには、「固定長静的テーブル」ではありませんので、MySQLのエンジンはに対処するための別の方法を使用します。

MySQLの検索が速くなりますので、固定長テーブルには、固定長のデータにオフセット次の計算が容易であることから、それは当然早く読まれる、パフォーマンスが向上します。フィールドは固定長でない場合と、そう、次のいずれかを見つけるたびに、プログラムは、主キーを見つける必要があります。

そして、固定長テーブルもキャッシュされ、再建される可能性が高いです。しかし、唯一の副作用は、固定長フィールドを使用するかどうかを固定長フィールドがないので、彼は多くのスペースを割り当てるべきである、いくつかのスペースを無駄にするということです。

「縦割り」の手法を使って、あなたのテーブルには、固定長、可変長である二つに分割することができます。

8、縦割り

テーブルのフィールドの数と複雑さを低減することができるように、最適化の目的を達成するように、「垂直分割」は、いくつかの方法にテーブルの列によってデータベース内のテーブルです。

例えば:ユーザフィールド内のテーブルはホームアドレスであり、フィールドが比較しているため、任意であり、そしてあなたの個人情報に加えて、あなたは時にデータベース操作が多いこのフィールドを読んだり書き換える必要はありません。では、なぜそれで別のテーブルで彼を入れていませんか?だからあなたのテーブルには、より良い性能を持たせる、我々は、私は、ユーザーのためにそれを見たときに、唯一のユーザーID、ユーザー名、パスワード、ユーザーの役割がしばしば使用されている多くはないと思います。小さなテーブルは、常に良好な性能を持っています。

また、あなたはこれらのテーブルは、フォームフィールドを分割していることに注意する必要がある、あなたは定期的に、そうでない場合は、このパフォーマンスは、分割しないよりも悪くなりますそれらを結合行かないと、それは極数になりますオーダーの減少。

9、あなたのSELECTクエリをEXPLAIN。

MySQLはSQL文を処理する方法をあなたに知らせることができますキーワードをEXPLAINを使用します。これは、あなたのクエリまたはテーブル構造にパフォーマンスのボトルネックを分析することができます。クエリの結果はまた、あなたのテーブルがように検索し、ソートされた......というように、とされてどのように、あなたのインデックスの主キーを使用する方法であることを教えてくれますEXPLAIN。

通常、我々は前に追加EXPLAIN、特にマルチテーブルSELECTステートメントに関連して、キーワードを複雑に比較することができます。あなたはこのことを行うためにはphpMyAdminを使用することができます。詳細は、附属書explain.docです。

第五に、フロントエンドの最適化

終了後の最適化とデータベースの後、我々はすぐに画像の最適化、JSやスタイルファイルを含め、フロントページとページ出力のためのリソース・ファイルを最適化されなければなりません。

私たちは、最適化は、関連する勧告を与える、テストや分析のために、次のWebパフォーマンステストツールをお勧めします。

GoogleのPageSpeedのツールが開発されました

ウェブマスターやウェブ開発者が自分のWebページのパフォーマンスを評価するためのPageSpeedを使用して、パフォーマンスを改善する方法についてのアドバイスを得ることができます。

YSlowのYSlowの

一定のルールがベースと最適化された方法、サイトのページを分析し、サイトのパフォーマンスを向上させるためにあなたを伝えることができます。

PHP中国のネットワーク:この記事はで再現されました

 

おすすめ

転載: www.cnblogs.com/lazb/p/11712262.html