ホームページ バックエンド開発 PHPチュートリアル PHP プログラミングの効率を向上させるために注意する必要があるいくつかの詳細_PHP チュートリアル

PHP プログラミングの効率を向上させるために注意する必要があるいくつかの詳細_PHP チュートリアル

Jul 13, 2016 pm 05:18 PM
改善する プログラミング

いくつかの細かい点に注意を払うと、PHPがより効率的に実行されるようになります


たとえば、出力にエコーを使用する場合、文字列に一重引用符が使用されている場合は、二重引用符を使用するより効率的です。これは、PHP は二重引用符で囲まれた文字列内の変数を検索しますが、一重引用符は検索しないためです。 注: エコーのみです。これは、複数の文字列をパラメータとして受け取ることができる「関数」です (注釈: PHP マニュアルには、echo は実際の関数ではなく言語構造であると記載されているため、関数は二重引用符で囲まれています)。
クラスメソッドを static (静的変数) として定義できる場合は、それを static として定義してみると、速度が 4 倍近く向上します。 (PS: T Good php Q バックル: 304224365、検証: csl)


$row[’id’] は $row[id] より 7 倍高速です。


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


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


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


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


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


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


関数は、正規表現の代わりに同じ機能を実行します。


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


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


switch case (select Branch ステートメント) を使用することは、複数の if、else if ステートメントを使用するよりも優れています。


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


Apache の mod_deflate モジュールを開くと、Web ページの閲覧速度が向上します。


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


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


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


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


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


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


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


10 個のメソッドを (メソッドのテスト前とテスト後の両方で) 追加しましたが、パフォーマンスに変化はなかったので、メソッド呼び出しはクラスで定義されたメソッドの数とは無関係であるように見えます。


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


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


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


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


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


文字列を操作し、その長さが特定の要件を満たしているかどうかを確認する必要がある場合は、当然 strlen() 関数を使用します。この関数は計算を行わず、zval 構造体 (PHP 変数の格納に使用される C の組み込みデータ構造体) に格納されている既知の文字列長を返すだけなので、非常に高速に実行されます。ただし、strlen() は関数であるため、関数呼び出しは小文字などの多くの手順を経るため、多少遅くなります (注釈: 小文字の関数名を指します。PHP は関数名の大文字と小文字を区別しません)。 )、ハッシュ検索、呼び出された関数と一緒に実行されます。場合によっては、 isset() トリックを使用してコードの実行を高速化できます。
(下記例)
if (strlen($foo) (以下のヒントと比較してください)
if (!isset($foo{5})) { echo 「Foo は短すぎます」$$ }
isset() の呼び出しは、strlen() よりも高速です。これは、後者とは異なり、言語構造としての isset() の実行に関数の検索や小文字が必要ないためです。つまり、実際には、最上位コードで文字列の長さをチェックするオーバーヘッドはそれほどかかりません。


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


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


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


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


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


多数の PHP 組み込み関数を使用してみます (ただし、PHP に存在しない関数を見つけるために、カスタム関数を作成できたはずの時間を無駄にしました。これは経験の問題です!)。


コード内に時間のかかる関数が多数ある場合は、それらを C 拡張機能として実装することを検討してください。


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


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


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


PHP のファイル操作は非効率ではありませんが、ファイル操作はできるだけ少なくしてください。

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

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

多次元配列で代入をループしたりネストしたりしないようにしてください。

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


foreach の方が効率的です。while や for ループの代わりに foreach を使用してみてください。

"i=i+1 を i+=1 に置き換えます。これは C/C++ の習慣に従っており、より効率的です。";


グローバル変数の場合は、使用後に unset() する必要があります



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

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/621638.html技術記事いくつかの細かい点に注意を払うと、PHP がより効率的に実行されます。たとえば、エコー出力を使用する場合、文字列に一重引用符が使用されている場合、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)

正規表現を使用してPHP配列から重複した値を削除します 正規表現を使用してPHP配列から重複した値を削除します Apr 26, 2024 pm 04:33 PM

正規表現を使用して PHP 配列から重複値を削除する方法: 正規表現 /(.*)(.+)/i を使用して、重複値を照合して置換します。配列要素を反復処理し、preg_match を使用して一致をチェックします。一致する場合は値をスキップし、一致しない場合は重複値のない新しい配列に追加します。

プログラミングは何のためにあるのか、それを学ぶと何の役に立つのか? プログラミングは何のためにあるのか、それを学ぶと何の役に立つのか? Apr 28, 2024 pm 01:34 PM

1. プログラミングは、Web サイト、モバイル アプリケーション、ゲーム、データ分析ツールなど、さまざまなソフトウェアやアプリケーションの開発に使用できます。その応用分野は非常に幅広く、科学研究、医療、金融、教育、エンターテイメントなど、ほぼすべての業界をカバーしています。 2. プログラミングを学ぶことは、問題解決スキルと論理的思考スキルを向上させるのに役立ちます。プログラミング中、問題を分析して理解し、解決策を見つけてコードに変換する必要があります。この考え方は、分析能力と抽象能力を養い、実際的な問題を解決する能力を向上させることができます。

Golang を使用してブラウザベースのアプリケーションを構築する Golang を使用してブラウザベースのアプリケーションを構築する Apr 08, 2024 am 09:24 AM

Golang を使用してブラウザベースのアプリケーションを構築する Golang は JavaScript と組み合わせて、動的なフロントエンド エクスペリエンスを構築します。 Golang をインストールする: https://golang.org/doc/install にアクセスします。 Golang プロジェクトをセットアップします。 main.go というファイルを作成します。 GorillaWebToolkit の使用: HTTP リクエストを処理するための GorillaWebToolkit コードを追加します。 HTML テンプレートの作成: template サブディレクトリに、メイン テンプレートであるindex.html を作成します。

コーディングの鍵: 初心者のための Python の力を解き放つ コーディングの鍵: 初心者のための Python の力を解き放つ Oct 11, 2024 pm 12:17 PM

Python は、学習の容易さと強力な機能により、初心者にとって理想的なプログラミング入門言語です。その基本は次のとおりです。 変数: データ (数値、文字列、リストなど) を保存するために使用されます。データ型: 変数内のデータの型 (整数、浮動小数点など) を定義します。演算子: 数学的な演算と比較に使用されます。制御フロー: コード実行のフロー (条件文、ループ) を制御します。

Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Oct 11, 2024 pm 08:58 PM

Python は、問題解決の初心者に力を与えます。ユーザーフレンドリーな構文、広範なライブラリ、変数、条件文、ループによる効率的なコード開発などの機能を備えています。データの管理からプログラム フローの制御、反復的なタスクの実行まで、Python が提供します

C++ プログラミング パズルのコレクション: 思考を刺激し、プログラミング スキルを向上させます C++ プログラミング パズルのコレクション: 思考を刺激し、プログラミング スキルを向上させます Jun 01, 2024 pm 10:26 PM

C++ プログラミング パズルは、フィボナッチ数列、階乗、ハミング距離、配列の最大値と最小値などのアルゴリズムとデータ構造の概念をカバーします。これらのパズルを解くことで、C++ の知識を強化し、アルゴリズムの理解とプログラミング スキルを向上させることができます。

C の謎を解く: 新人プログラマーのための明確でシンプルな道 C の謎を解く: 新人プログラマーのための明確でシンプルな道 Oct 11, 2024 pm 10:47 PM

C は、初心者がシステム プログラミングを学習するのに最適な選択肢です。ヘッダー ファイル、関数、メイン関数のコンポーネントが含まれています。 「HelloWorld」を印刷できる単純な C プログラムには、標準入出力関数宣言を含むヘッダー ファイルが必要で、main 関数で printf 関数を使用して印刷します。 C プログラムは、GCC コンパイラーを使用してコンパイルして実行できます。基本をマスターしたら、データ型、関数、配列、ファイル処理などのトピックに進み、熟練した C プログラマーになることができます。

Go Get を使用して Go モジュールをすばやく簡単に入手します Go Get を使用して Go モジュールをすばやく簡単に入手します Apr 07, 2024 pm 09:48 PM

GoGet を使用すると、Go モジュールをすばやく簡単に取得できます。手順は次のとおりです: ターミナルで goget[module-path] を実行します。ここで、 module-path はモジュール パスです。 GoGet は、モジュールとその依存関係を自動的にダウンロードします。インストールの場所は、GOPATH 環境変数によって指定されます。

See all articles