この問題については、まず PHP のパフォーマンスに影響を与える理由を知る必要があります。それは
1 PHP のパフォーマンスの問題はどのような状況で発生しますか?
1php構文の不正使用(PHP独自の関数で処理できる一部業務を含む)
2 苦手なことをPHP言語で行う
3php言語を使用して接続されているサーバーは強力ではありません(もちろん、localhostの場合、ローカル設定は比較的貧弱なので、変更することをお勧めします(笑))
4php自体の欠点(PHP自体はできない)
5私たちにもわからない問題(囧)
2 PHP パフォーマンス問題の概要 - PHP パフォーマンス問題の解決策
最も難しいものから最も難しいものまで:
1 Php 言語レベルのパフォーマンスの最適化
2 Php周辺問題(mysql nginx|apacheなど)のパフォーマンスの最適化
3 PHP 言語の上級分析と最適化 (PS は主に基礎となる C コードを指します)
以下は、PHP 言語レベルのパフォーマンスの最適化に関する説明の例であり、タイトルで述べた内容のテストです。次に、2 つのファイル bad.php、goods.php を記述する必要があります。
テストしたいのは2つの配列を結合する操作です(テストツール apache ab test)
bad.php
アイデア:まず配列 1 をターゲット配列に 1 つずつ追加します
その後、配列 2 を走査し、配列 2 の要素が配列 1 に出現するかどうかを比較します。出現しない場合は、それらをターゲット配列に挿入し、そうでない場合は無視します
りー
goods.php
アイデア:順序をシャッフルして 2 つの配列をランダムに生成します
その後、array_mergeを使用してマージします
りー
3 ab を使用して、2 つの PHP スクリプトの速度をテストします: (追記: 素晴らしい瞬間が始まります)
悪い.php
goods.php
vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20141205/20141205084010231.png" alt="PHP パフォーマンスの最適化 - PHP 言語レベルのパフォーマンスの最適化 - PHP チュートリアル" target="_blank" class="keylink">
これら 2 つのテストでは、違いが少しも違うことがはっきりとわかります。 bad.php を実行すると、明らかにコンピューターのファンが吹いているのを感じました。
bad.php は 1 秒あたり 174 のリクエストに応答し、リクエストあたり 572 ミリ秒で処理します
goods.php は 1 秒あたり 4050 のリクエストに応答し、リクエストごとに 24 ミリ秒を処理します
追記: まだ不適切な文章を使用している場合は、できるだけ早く変更し、上司に気づかれないように注意してください。
4 その理由
この結果には私も驚きましたが、それについて私たちにできることは何もありません。では、なぜこれほどの影響があるのかを調べてみましょう。
*.php (php コード) -----スキャナー (zend エンジンが zend が認識できる構文を 1 行ずつスキャンします) ----> expr
-----parser(オペコードへの解析)-----> オペコード ------exec(最終出力の実行)------> 出力
zend を実行するにはまず PHP ファイルをスキャンし、出力を実行する前にオペコードに解析する必要があることがわかります。PHP 独自の関数を使用する場合、実際には zend の解析が必要になります。速度は良い(goods.php)と呼ばれますが、bad.phpを実行すると、他の人が書いたコードを読むのは自分が書いたコードを読むほど速くないため、その通りです。なので、ホイールは自分で作らずにオリジナルのものを使用する方が良いです。
もう少し言うと、これが、多くの Php 拡張機能 (apc など) がオペコードをキャッシュするようになった理由です。これにより、スキャンと解析の必要がなくなり、確実に高速化されるからです。5 概要
最適化ポイント: 記述するコードを減らし、PHP 自体が提供する機能をより多く使用します
パフォーマンスの問題:
私が書いたコードは冗長で読みにくく、パフォーマンスも低いです
パフォーマンスが低いのはなぜですか?
PHP コードをコンパイルし、基礎となる言語に解析する必要があります。このプロセスはリクエストごとに処理され、非常にコストがかかります。
良い方法:
より多くの PHP 組み込み変数、定数、関数を使用します (spl は便利な関数を提供します)