ホームページ バックエンド開発 PHPチュートリアル php_PHP チュートリアルを最適化する方法

php_PHP チュートリアルを最適化する方法

Jul 13, 2016 am 10:37 AM
php

PHP - いくつかのパフォーマンス最適化方法

0. 文字列を含めるには二重引用符の代わりに一重引用符を使用すると高速になります。 PHP は二重引用符で囲まれた文字列内の変数を検索しますが、一重引用符は検索しません。 注: これを実行できるのは echo だけです。これは複数の文字列をパラメータとして受け取ることができる「関数」です (注釈: PHP マニュアル echo は実際の関数ではなく言語構造であるため、関数は二重引用符で囲まれています)。

追記: 一重引用符を使用すると、PHP は変数やエスケープ文字などを自動的に検索しないため、効率が大幅に向上します。一般に、文字列には変数がないため、二重引用符を使用するとパフォーマンスが低下します。


1. クラスメソッドを静的に定義できる場合は、それを静的に定義してみると、速度が 4 倍近く向上します。

追記: 実際、関数、メソッド、静的メソッドの速度はそれほど変わりません。詳細は記事「PHP関数の実装原理と性能解析【再録】」を参照してください。


2. $row[’id’] の速度は $row[id] の 7 倍です。

追記: 唯一の違いは、後者が最初に id マクロが存在するかどうかを判断し、存在しない場合は自動的に文字列に変換されることのようです。


3. Echo は print より高速で、echo $str1、$str2 などの文字列連結の代わりに echo の複数のパラメーター (注釈: ピリオドの代わりにカンマを使用することを指します) を使用します。


追記: echo $str1.$str2 を使用すると、PHP エンジンは最初にすべての変数を接続してから、echo $str1,$str2 のときにそれらを順番に出力します


4. for ループを実行する前に最大ループ数を決定します。ループごとに最大値を計算するのではなく、代わりに foreach を使用することをお勧めします。

追記: count や strlen などの演算は実際には O(1) なので、ループするたびに計算を行わないようにする方が、当然、大量の消費を引き起こすことはありません。 foreach の代わりに foreach を使用することをお勧めします。foreach($array as $var) の各コピーの消費を考慮すると、foreach($array as &$var) のような参照を使用できます。


5. 未使用の変数、特に大きな配列の登録を解除して、メモリを解放します。

追記:私の記憶が正しければ、unset($array) はすぐにメモリを解放しませんが、いつでも解放するのは良い習慣です。


6. __get、__set、__autoload の使用は避けてください。


7. require_once() は高価です。

追記: require_once と include_once は大きく判断する必要があるため、効率は低くなりますが、効率の問題はバージョン 5.2 以降で基本的に解決されました。


8. ファイルをインクルードする場合は、絶対パスを使用するようにしてください。これにより、include_path 内のファイルを検索する PHP の速度が低下し、オペレーティング システムのパスの解析に必要な時間が短縮されます。

追記: サポートされています。include_path の設定には iniset() をできるだけ使用しないでください。


9. スクリプトの実行開始時刻 (注釈: サーバーがクライアント要求を受信する時刻) を知りたい場合は、time() よりも $_SERVER['REQUEST_TIME'] を使用する方が良いでしょう。

追記: $_SERVER['REQUEST_TIME'] はリクエストが開始されたときのタイムスタンプを保存し、time() は現在の時点の Unix タイムスタンプを返します。


10. 関数は正規表現を置き換えて同じ関数を完成させます。

追記: この種の関数は、strtok、strstr、strpos、str_replace、substr、explode、implode などを指します。


11. str_replace 関数は preg_replace 関数よりも高速ですが、strtr 関数は str_replace 関数よりも 4 倍効率的です。

追記: 文字列操作は通常の置換よりも高速です。


12. 文字列置換関数がパラメーターとして配列または文字を受け入れ、パラメーターの長さが長すぎない場合は、単に 1 行のコードを記述するのではなく、渡される各パラメーターが文字になるように追加の置換コードを記述することを検討できます。配列をクエリおよび置換のパラメータとして受け入れます。

追記: 組み込み関数とユーザー定義関数のコストの違いを考慮する必要があると思いますが、このアプローチにはメリットがありません。


13. 複数の if、else if ステートメントを使用するよりも、選択的分岐ステートメント (翻訳アノテーション: switch case) を使用する方が適切です。

追記: PHP のスイッチは数値変数と文字列変数をサポートしているため、C のスイッチよりも使いやすいです。


14. @ を使用してエラー メッセージをブロックするのは非常に非効率的です。

追記:代替手段はありますか?そうでない場合は、まだ使用する必要があります...


15. Apache の mod_deflate モジュールをオンにして、Web ページの閲覧速度を向上させます。


16. データベース接続は、使用が終了したら閉じる必要があります。長い接続は使用しないでください。

PS: 接続する前に、リンク タイムアウト、読み取りおよび書き込みタイムアウト、待機タイムアウトなど、対応するタイムアウト メカニズムを設定することをお勧めします。


17. エラーメッセージは高価です。


18. メソッド内でローカル変数をインクリメントするのが最も高速です。関数内でローカル変数を呼び出すのとほぼ同じ速度です。


19. グローバル変数のインクリメントは、ローカル変数のインクリメントより 2 倍遅くなります。


20. オブジェクト プロパティのインクリメント ($this->prop++ など) は、ローカル変数のインクリメントより 3 倍遅くなります。


21. 未定義のローカル変数をインクリメントするのは、事前定義されたローカル変数をインクリメントするよりも 9 ~ 10 倍遅くなります。


22. 関数内で呼び出さずにローカル変数を定義するだけでも、(ローカル変数をインクリメントするのと同じ程度に) 速度が低下します。 PHP はおそらく、グローバル変数が存在するかどうかを確認します。


23. 10 個のメソッドを追加したため (メソッドのテスト前とテスト後の両方)、メソッド呼び出しはクラスで定義されているメソッドの数に依存していないように見えますが、パフォーマンスに変化はありませんでした。


24. 派生クラスのメソッドは、基本クラスで定義された同じメソッドよりも高速に実行されます。


25. 1 つのパラメーターを指定して空の関数を呼び出すには、7 ~ 8 回のローカル変数のインクリメント操作を実行するのと同じ時間がかかります。同様のメソッド呼び出しには、15 近くのローカル変数の増分が必要です。


26. Apache が PHP スクリプトを解析するのにかかる時間は、静的な HTML ページを解析するよりも 2 ~ 10 倍遅くなります。使用する静的な HTML ページを増やし、スクリプトを減らすようにしてください。


27. スクリプトをキャッシュできない限り、呼び出されるたびに再コンパイルされます。 PHP キャッシュ メカニズムを導入すると、通常、コンパイルのオーバーヘッドが排除され、パフォーマンスが 25% ~ 100% 向上します。


28. できるだけキャッシュするようにしてください。memcached を使用できます。 Memcached は、動的 Web アプリケーションを高速化し、データベースの負荷を軽減するために使用できる高性能メモリ オブジェクト キャッシュ システムです。 OP コードのキャッシュは、リクエストごとにスクリプトを再コンパイルする必要がないように便利です。


29. 文字列を操作し、その長さが特定の要件を満たしているかどうかを確認する必要がある場合は、当然 strlen() 関数を使用します。この関数は計算を行わず、zval 構造体 (PHP 変数の格納に使用される C の組み込みデータ構造体) に格納されている既知の長さの文字列を返すだけなので、非常に高速に実行されます。ただし、strlen() は関数であるため、関数呼び出しは小文字などの多くの手順を経るため、多少遅くなります (注釈: 小文字の関数名を指します。PHP は関数名の大文字と小文字を区別しません)。 )、ハッシュ検索、呼び出された関数と一緒に実行されます。場合によっては、 isset() を使用できます。 コードの実行を高速化するためのヒント。


(下記例)


if (strlen($foo)


(以下のヒントと比較してください)


if (!isset($foo{5})) { echo 「Foo は短すぎます」$$ }


isset() の呼び出しは、strlen() よりも高速です。これは、後者とは異なり、言語構造としての isset() は、その実行に関数の検索と小文字が必要ないことを意味するためです。つまり、実際には、最上位コードで文字列の長さをチェックするオーバーヘッドはそれほどかかりません。

追伸:たくさんのことを学びました。


30. 変数 $i のインクリメントまたはデクリメントを実行する場合、$i++ は ++$i より遅くなります。この違いは PHP に固有のものであり、他の言語には当てはまりません。そのため、C または Java コードを変更して、すぐに高速になることを期待しないでください。実際には機能しません。 ++$i は 3 つの命令 (オペコード) しか必要としないため高速ですが、$i++ は 4 つの命令を必要とします。ポストインクリメントでは、実際には、後でインクリメントされる一時変数が作成されます。プレフィックスの増分は、元の値に直接増加します。これは、Zend の PHP オプティマイザーによって行われるような、最適化の一種です。すべてのコマンド オプティマイザーが同じ最適化を行うわけではなく、コマンド オプティマイザーがインストールされていないインターネット サービス プロバイダー (ISP) やサーバーが多数存在するため、この最適化を念頭に置くことをお勧めします。


31. すべてがオブジェクト指向 (OOP) である必要はありません。オブジェクト指向は多くの場合非常に高価であり、各メソッドとオブジェクトの呼び出しは大量のメモリを消費します。


32. すべてのデータ構造を実装するためにクラスを使用する必要はありません。配列も非常に便利です。


33. メソッドを細分化しすぎないでください。実際にどのコードを再利用するかを慎重に考えてください。


34. 必要に応じていつでもコードをメソッドに分割できます。

追記: 行数が少なく、頻度が高いメソッドの場合は、コードを直接記述するようにしてください。これにより、関数スタックのオーバーヘッドが軽減され、メソッドのネストが深すぎてはなりません。そうしないと、メソッドの動作効率に大きな影響を及ぼします。 PHP。


35. できるだけ多くの PHP 組み込み関数を使用するようにしてください。


36. コード内に時間のかかる関数が多数ある場合は、C 拡張機能を使用して実装することを検討できます。


37. コードをプロファイリングします。チェッカーは、コードのどの部分にどれくらいの時間がかかっているかを示します。 Xdebug デバッガーには、コードの全体的な整合性を評価し、コード内のボトルネックを明らかにする検査ルーチンが含まれています。


38. mod_zip を Apache モジュールとして使用すると、データを即座に圧縮し、データ転送量を 80% 削減できます。


39. file、fopen、feof、fgets などの一連のメソッドの代わりに file_get_contents を使用できる場合は、より効率的であるため、file_get_contents を使用してください。ただし、URL ファイルを開くときは、file_get_contents の PHP バージョンの問題に注意してください。

追記: これを覚えておいて、file_get_contents と file_put_contents を使用してみてください。ファイル ハンドルが正常に開かれたかどうかを判断する必要はありません。


40. PHP のファイル操作効率は低くありませんが、ファイル操作をできるだけ少なくします。


41. Select SQL ステートメントを最適化し、実行する挿入操作と更新操作をできるだけ少なくします (更新について批判されました)。


42. 可能な限り PHP の内部関数を使用します (ただし、PHP に存在しない関数を見つけるために、カスタム関数を作成することで作成できる時間を無駄にしました。これは経験の問題です!);

追記: 組み込み関数は、ユーザー定義関数よりもほぼ 1 桁効率的です。


43. ループ内で変数、特に大きな変数を宣言しないでください: オブジェクト (これは PHP だけの問題ではないようです?);

PS: これは、変数が多すぎる場合、または大きすぎる場合に必要です。各再割り当てのオーバーヘッドは無視できません。


44. 多次元配列で代入をループしたり入れ子にしたりしないようにしてください。


45. PHP の内部文字列操作関数を使用できる場合は、正規表現を使用しないでください。


46. foreach はより効率的です。while および for ループの代わりに foreach を使用してみてください。


47. 文字列を引用するには二重引用符の代わりに一重引用符を使用します。

追伸: うわー、これが最初ではないですか?


48. 「i=i+1 の代わりに i+=1 を使用すると、C/C++ の習慣に準拠し、より効率的になります。」;


49. グローバル変数は使用後に unset() する必要があります;

http://www.bkjia.com/PHPjc/735901.html

tru​​ehttp://www.bkjia.com/PHPjc/735901.html技術記事 PHP-いくつかのパフォーマンス最適化方法 0. 文字列を含めるには二重引用符の代わりに一重引用符を使用すると高速になります。 PHP は二重引用符、一重引用符で囲まれた文字列内の変数を検索するため...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles