検索
ホームページバックエンド開発PHPチュートリアルPHP最適化の詳しい説明_PHPチュートリアル

PHP最適化の詳しい説明_PHPチュートリアル

Jul 20, 2016 am 11:13 AM
phpできない最適化確保する誠実さスキル集めるソース詳しい説明

著者が収集したこれらのヒントは幅広い情報源から得ており、完全性は保証できません。 数が多いため、これらの最適化手法はテストされていません。結局のところ、これらのテクニックが役立つかどうかは、PHP が配置されている固有の環境に依存します。

ディレクトリインデックス

ボトルネックの発見

パフォーマンスの問題に直面したとき、最初のステップは、ヒントのリストを見るのではなく、常に問題の原因を見つけることです。ボトルネックの原因を理解し、ターゲットを見つけて修正を実装し、再度テストします。ボトルネックを見つけることは、数千マイルにわたる長い旅の最初のステップにすぎません。最も重要な最初のステップでボトルネックを見つけるのに役立つことを願っています。

  • 監視手法 (監視トレジャーなど) を使用して、ネットワーク、特にネットワーク状態は急速に変化します。うまく行えば、ボトルネックを 5 分で見つけることができます。
  • コードを分析します。コードのどの部分に最も時間がかかるかを理解し、これらの部分にさらに注意を払う必要があります。
  • ボトルネックを見つけるには、各リソース要求 (ネットワーク、CPU、メモリ、共有メモリ、ファイル システム、プロセス管理、ネットワーク接続など) を確認します
  • 最初に反復構造と複雑なコードのベンチマークを実行します
  • 実際の負荷の下で実際のデータを使用して実際のテストを実行します。もちろん、可能であれば実稼働サーバーを使用するのが最善です。

キャッシング

キャッシュがパフォーマンスの問題を解決する最も効果的な方法の 1 つであると考える人もいます。次のことを試してください:

  • OPCODE (オペレーション コード) キャッシュを使用して、スクリプトがアクセスされるたびに再コンパイルされないようにします。たとえば、Windows プラットフォームで Windows キャッシュ拡張機能を有効にします。オペコード、ファイル、相対パス、セッション データ、ユーザー データをキャッシュできます。
  • マルチサーバー環境で分散キャッシュの使用を検討してください
  • imap_header() を呼び出す前に imap_headers() を呼び出してください

コンパイル vs. インタープリタ

PHP ソースコードをマシンコードにコンパイルします。動的解釈は同じコンパイルを実行しますが、行ごとに実行されます。オペコードへのコンパイルは妥協であり、PHP ソース コードをオペコードに変換し、そのオペコードをマシン コードに変換できます。以下は、コンパイルと解釈に関する関連するヒントです:

  • オンラインにする前に、PHP コードをマシンコードにコンパイルします。オペコードのキャッシュは最良の選択ではありませんが、それでも解釈されるよりは優れています。あるいは、PHP コードを C 拡張機能にコンパイルすることを検討してください。
  • PHP のオペコード コンパイラー (bcompiler) は実稼働環境ではまだ利用できませんが、開発者は http://php.net/manual/en/book.bcompiler.php.
  • に注意する必要があります。

コードの減量 (コンテンツの削減)

少ないほど良いです。 これらのヒントはコードを減らすのに役立ちます:

  • ページごとの機能が少なくなります
  • クリーンなウェブコンテンツ
  • 解釈された実行の場合は、コメントやその他の空白をクリーンアップしてください
  • データベースクエリを削減

マルチスレッドとマルチプロセッシング

最も速いものから最も遅いものまで:

PHP はマルチスレッドをサポートしていませんが、C でマルチスレッド PHP 拡張機能を作成できます。複数のプロセスを使用したり、複数のプロセスをシミュレートする方法はいくつかありますが、サポートがあまり良くなく、単一プロセスよりも遅くなる可能性があります。

文字列

文字列処理は、ほとんどのプログラミング言語で最も一般的に使用される操作の 1 つです。文字列処理を高速化するためのヒントをいくつか紹介します:

  • PHPの接続操作(ポイント操作)が最速のリンク方法です
  • 印刷では文字列の連結を避け、カンマで区切ってECHOを使用してください
  • 可能な限り、正規表現の代わりに str_ という接頭辞が付いた文字列関数を使用してください
  • pos() は preg_mach() や ereg() よりも高速です
  • 文字列を一重引用符で囲む方が二重引用符よりも速いという人もいますが、違いはないと言う人もいます。もちろん、文字列内の変数を引用符で囲みたい場合は、一重引用符は役に立ちません。
  • 文字列の長さが特定の値(5 など)より小さいかどうかを判断したい場合は、isset($s[4])
  • 複数の小さな文字列を 1 つの大きな文字列に連結する必要がある場合は、まず ob_start 出力キャッシュを有効にしてから、echo を使用してバッファに出力し、次に ob_get_contents を使用して文字列を読み取ります

正規表現

正規表現は、文字列を比較および検索するための柔軟で多様な方法を提供しますが、そのパフォーマンスのオーバーヘッドは実際には低くありません

  • 可能な限り、正規表現の代わりに STR_ というプレフィックスが付いた文字列処理関数を使用してください
  • (a|e|i|o|u)の代わりに[aeiou]を使用してください
  • 正規表現が単純であればあるほど高速になります
  • 可能な場合は PCRE_DOTALL 修飾子を設定しないでください
  • .* の代わりに ^.* を使用してください
  • 正規表現を簡素化します。 (たとえば、(a+)* の代わりに a* を使用します

反復構成 (for、while)

イテレーション (反復、ループ) は最も基本的な構造化プログラミング手法であり、これを使用しないプログラムを想像するのは困難です。反復構造のパフォーマンスを向上させるのに役立つヒントをいくつか紹介します:

  • コードを可能な限りループ外に移動します (関数呼び出し、SQL クエリなど)
  • for(i=0;i
  • foreach を使用してコレクションと配列を反復処理します

選択構造 (if、switch)

反復構造と同様に、選択構造も最も基本的な構造変換手法です。次のヒントによりパフォーマンスが向上する可能性があります:

  • スイッチとelse-ifのうち、最近よくtrueになるものを前に、めったにtrueにならないものを後ろにリストします
  • if-else は switch/case よりも速いという人もいます。もちろん反対する人もいます。
  • else if の代わりに elseif を使用してください。

関数とパラメータ

関数のコードを小さな関数コードに分割すると、冗長性が排除され、コードが読みやすくなりますが、その代償はどれくらいでしょうか?関数をより効果的に使用するためのヒントをいくつか紹介します:

  • オブジェクトと配列を値ではなく参照によって渡します
  • 1 か所のみで使用する場合は、インラインで使用します。複数の場所で呼び出される場合はインライン化を検討してください。ただし、保守性には注意してください
  • 使用する関数の複雑さを理解します。例えば、similar_text() は O(N^3) なので、文字列長が 2 倍になると処理時間は 8 倍になります
  • 「参照を返す」ことでパフォーマンスを向上させないでください。エンジンは自動的に最適化します。
  • call_user_func_array() や eval() を使用する代わりに、通常の方法で関数を呼び出します

オブジェクト指向構造

PHP のオブジェクト指向機能はパフォーマンスに影響を与える可能性があります。次のヒントは、この影響を最小限に抑えるのに役立ちます:

  • すべてをオブジェクト指向にする必要はありません。パフォーマンスの損失が利点自体を上回る可能性があります
  • オブジェクトの作成が遅い
  • 可能であれば、可能な限りオブジェクトの代わりに配列を使用してください
  • メソッドを静的にできる場合は、静的に宣言してください
  • 関数呼び出しは派生クラスのメソッド呼び出しよりも高速であり、派生クラスのメソッド呼び出しは基本クラスの呼び出しよりも高速です
  • 最も一般的に使用されるコードを基本クラスから派生クラスにコピーすることを検討してください。ただし、メンテナンス上の危険に注意してください
  • ネイティブのゲッターとセッターの使用は避けてください。不要な場合は削除してプロパティを公開してください
  • 複雑な PHP クラスを作成する場合は、シングルトン パターンの使用を検討してください

セッション処理

セッションの作成には多くの利点がありますが、場合によっては不必要なパフォーマンスのオーバーヘッドが発生することがあります。次のヒントは、パフォーマンスのオーバーヘッドを最小限に抑えるのに役立ちます:

  • auto_start を使用しないでください
  • use_trans_sidを有効にしないでください
  • session_cache_limited を private_no_expire に設定します
  • 仮想ホスト (vhost) 内の各ユーザーに独自のディレクトリを割り当てます
  • ファイルベースのセッション処理の代わりにメモリベースのセッション処理を使用します

型キャスト

あるタイプから別のタイプへの変換にはコストがかかります

圧縮

送信前にテキストとデータを圧縮します:

  • コードの先頭で ob_start() を使用します
  • ダウンロードを高速化するには ob_gzhandler() を使用しますが、CPU オーバーヘッドに注意してください
  • Apache の mod_gzip モジュールは即座に圧縮できます

エラー処理

エラー処理はパフォーマンスに影響します。私たちにできることは:

  • エラー ログを記録する。エラー レポートを抑制するために「@」を使用しないでください。
  • エラーログをチェックするだけでなく、警告ログも処理する必要があります

宣言、定義、スコープ

変数、配列、またはオブジェクトの作成はパフォーマンスに影響します:

  • グローバル変数/オブジェクトを宣言して使用する方がローカル変数/オブジェクトよりも速いという人もいますが、反対する人もいます。決める前にテストしてください。
  • すべての変数を使用する前に宣言し、未使用の変数を宣言しないでください
  • ループ内では可能な限り $a[] を使用し、$a=array(…) の使用を避けてください

メモリリーク

メモリが割り当てられているのに解放されない場合、これは間違いなく問題です:

  • リソースの解放を要求し、組み込み/自動ガベージ コレクションを期待しないでください
  • 使用後は変数、特にリソースクラスや大きな配列型の設定を解除するようにしてください
  • 使用後はデータベース接続を閉じます
  • ob_start() を使用するたびに、ob_end_flush() または ob_end_clean() を思い出してください

車輪の再発明はやめましょう

なぜ他の人がすでに解決している問題の解決に時間を費やす必要があるのでしょうか?

  • PHP、その機能、拡張機能について学びます。知らないと、既製の機能の一部を利用できない可能性があります
  • 組み込みの配列関数と文字列関数を使用すると、間違いなく最高のパフォーマンスを発揮します。
  • 先人が発明したホイールが環境内のエネルギーを吸収するのに最適であるという意味ではありません、もっとテストしてください

コードの最適化

  • オペコードオプティマイザーを使用する
  • 解釈して実行する場合は、ソースコードを簡略化してください

DASDの代わりにRAMを使用する

RAM はディスクよりもはるかに高速であり、RAM を使用するとパフォーマンスが向上します:

  • ファイルを Ramdisk に移動する
  • ファイルベースのセッション処理の代わりにメモリベースのセッション処理を使用します

サービスの使用 (例: SQL)

SQL はリレーショナル データベースにアクセスするためによく使用されますが、PHP コードはさまざまなサービスにアクセスできます。サービスにアクセスする際に留意すべき点がいくつかあります:

  • サーバーに東方について何度も質問しないでください。メモ化を使用して最初の結果をキャッシュすると、以降のアクセスはキャッシュに直接保存されます
  • SQL では、mysql_fetch_array() の代わりに mysql_fetch_assoc() を使用して、結果セット内の整数インデックスを減らします。結果セットにはインデックス番号ではなくフィールド名でアクセスします。
  • Oracle データベースの場合、使用可能なメモリが十分でない場合は、oci8.default_prefetch を増やします。 oci8.statement_cache_size をアプリケーション内のステートメントの数に設定します
  • 結果セットが処理のために他のレイヤーに送信される場合を除き、mysqli_fetch_all() の代わりに mysqli_fetch_array() を使用してください。

インストールと構成

PHP をインストールして構成するときは、パフォーマンスを考慮してください:

  • メモリを追加
  • 競合するアプリやサービスを削除する
  • 必要な拡張機能のみをコンパイルします
  • PHP を APACHE に静的コンパイルする
  • -O3 CFLAGS を使用してすべてのコンパイラの最適化を有効にします
  • 必要なモジュールのみをインストールしてください
  • 最新のマイナーバージョンにアップグレードします。マザーボードをアップグレードするときは、最初のバグが修正されるまで待ってください。もちろん、あまり長く待たないでください。
  • マルチCPU環境用に構成する
  • -enable-inline-optimization を使用する
  • session.save_handler=mm を設定し、-with-mmto でコンパイルし、共有メモリを使用します
  • RAMディスクを使用する
  • register_global と magic_quotes_* をオフにする
  • expose_phpを閉じる
  • 使用する必要がない限り、always_populate_raw_post_data をオフにしてください
  • 非コマンドラインモードでは register_argc_argv をオフにしてください
  • PHP は .php ファイル内でのみ使用してください
  • max_execution_time、max_input_time、memory_limit、output_bufferingのパラメータを最適化します
  • ファイル/ディレクトリのアクセス速度を向上させるには、Apache 構成ファイルのallowoverride を none に設定します
  • -march、-mcpu、-msse、-mmmx、および -mfpmath=sseto を使用して CPU を最適化します
  • MySQL ネイティブ ドライバー (mysqlnd) を使用して、libmysql、mysqli 拡張機能、および PDO MYSQL ドライバーを置き換えます
  • register_globals、 register_long_arrays 、 register_argc_argv をオフにします。
  • auto_globals_jit をオンにします。

その他

分類するのが難しいスキルもいくつかあります:

    include()、require() を使用し、include_once() と require_once() は避けてください
  • include()/require() で絶対パスを使用する
  • 静的 HTML は PHP によって生成された HTML より高速です
  • 正規表現の代わりに ctype_alnum、ctype_alpha、ctype_digital を使用します
  • 単純なサーブレットまたは CGI を使用する
  • 本番環境でコードを使用する場合は、可能な限りログを記録します
  • 出力バッファリングを使用する
  • $a==null を比較する代わりに isset($a) を使用してください。 is_nul($a) の代わりに $a===null を使用してください。
  • スクリプトの実行開始時間が必要です。time()を使用する代わりに$_SERVER[’REQUEST_TIME’]を直接読んでください
  • printの代わりにechoを使用してください
  • ポストインクリメント (i++) の代わりにプレインクリメント (++i) を使用してください。ほとんどのコンパイラーは最適化しますが、最適化されない場合は、このように記述し続けてください。
  • XML を処理し、DOM や SAX の代わりに正規表現を使用します
  • ハッシュアルゴリズム: md4、md5、crc32、crc32b、sha1は他のハッシュ速度より高速です
  • spl_autoload_extensions を使用する場合は、ファイル拡張子を最も一般的に使用されるものから最も一般的に使用されないものの順に並べ、まったく使用されないものは除外するようにしてください。
  • fsockopen または fopen を使用する場合は、ドメイン名の代わりに IP アドレスを使用します。ドメイン名が 1 つしかない場合は、gethostbyname() を使用して IP アドレスを取得します。 cURL を使用すると高速になります。
  • 可能な限り、動的コンテンツを静的コンテンツに置き換えます。
  • www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/440393.html技術記事著者が収集したこれらのヒントは幅広い情報源から得たものであり、その完全性は保証されません。 数が多いため、これらの最適化手法はテストされていません。結局のところ、使用する前に自分でテストしてください...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境