ホームページ  >  記事  >  バックエンド開発  >  PHP 効率の最適化と PHP パフォーマンスを向上させるいくつかの方法_PHP チュートリアル

PHP 効率の最適化と PHP パフォーマンスを向上させるいくつかの方法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:31:35828ブラウズ

1. file、fopen、feof、fgets などの一連のメソッドの代わりに file_get_contents を使用できる場合は、より効率的である file_get_contents を使用するようにしてください。ただし、URL ファイルを開くときは、file_get_contents の PHP バージョンの問題に注意してください。
2. PHP のファイル操作の効率は低くありませんが、実行するファイル操作をできるだけ少なくしてください。
3. Select SQL ステートメントを最適化してください。できる限り挿入と更新の操作を減らす (私は更新ページで批判されました)
4. PHP の内部関数をできるだけ使用します (ただし、PHP に存在しない関数を見つけるのにお金を無駄にしました)。関数をカスタマイズするのは一度だけです。これは経験の問題です。
5. ループ内で変数、特に大きな変数を宣言しないでください (これは PHP だけの問題ではないようです)。多次元配列でループしない
7. PHP の内部文字列操作関数を使用できる場合は正規表現を使用しないでください。foreach を while ループや for ループの代わりに使用してください。代わりに一重引用符を使用します。
10. 「i=i+1 の代わりに i+=1 を使用します。これは C/C++ の習慣に従っており、より効率的です。」
11.使用後に)ed
12. for または foreach では、$tempArray[count($tempArray)] = $field の代わりに $tempArray[] = $field を使用します
13. 静的に呼び出されるメンバーは static として定義する必要があります (PHP5 のみ)
ヒント: PHP 5 では、静的メンバーの概念が導入されています。これは、PHP 4 の関数内の静的変数と同じ機能を持ちますが、前者はクラスのメンバーとして使用されます。静的変数は、Ruby のクラス変数に似ています。クラスのすべてのインスタンスは同じ静的変数を共有します。

Quote:



コピーのコード

コードは次のとおりです。 '; } } $foo = new foo;
$foo->bar();
// 静的メソッド


非静的メンバーを使用すると、静的メンバーを静的に呼び出すよりも効率が 50 ~ 60% 遅くなります。主な理由は、前者は E_STRICT 警告を生成し、内部で変換する必要があるためです。
クラス定数を使用する (PHP5 のみ)
ヒント: C++ の const に似た PHP 5 の新機能。
クラス定数を使用する利点は次のとおりです:
- コンパイル時の解析、余分なオーバーヘッドなし
- ハッシュ テーブルが小さいため、内部検索が高速になります
- クラス定数は特定の「名前空間」にのみ存在するため、ハッシュ名は短い
- コードクリーナー、デバッグが簡単になります
(一時的に)require/include_once は使用しないでください
require/include_once は呼び出されるたびにターゲットファイルを開きます!
- 絶対パスが使用されている場合、PHP 5.2/6.0 にはこの問題はありません
- APC キャッシュ システムの新しいバージョンでは、この問題が解決されました
ファイル I/O の増加 => 効率の低下
必要に応じて、ファイルが/include が必要です。
意味のない関数を呼び出さない
対応する定数がある場合は関数を使用しないでください。
引用:



コードをコピーします

コードは次のとおりです:


// dZ902 による CU の PHP コードの強調表示
php_uname('s') == PHP_OS;
php_version() = = PHP_VERSION;
php_sapi_name() == PHP_SAPI;
?>
あまり使用されませんが、効率は約 3500% 向上します。 最速の Win32 チェック 引用:


コードをコピーします

コードは次のとおりです:


// dZ902 による CU の PHP コード ハイライト
$is_win = DIRECTORY_SEPARATOR == '\' ;
? >

時間の問題 (PHP>5.1.0 のみ) システム関数 time() の代わりにシステム変数 $_SERVER['REQUEST_TIME'] を使用する PCRE を高速化する 一致するコンテンツにメモリを割り当て、保存します。効率が約15%向上します。
- 正規表現の使用を避けられる場合は、分析する際にマニュアルの「文字列関数」セクションをよく読んでください。見逃している便利な機能はありますか?
例:
strpbrk()
strncasecmp()
strpos()/strrpos()/stripos()/strripos()
strtrの速度を上げる
変換する必要があるのが単一の文字だけの場合は、代わりに文字列を使用してください配列の strtr:
QUOTE:



コードをコピー

コードは次のとおりです:


// dZ902 による CU の PHP コードの強調表示
$addr = strtr($addr, " abcd", "efgh") ; // 良い
$addr = strtr($addr, array('a' => 'e',
// ...
)); // 悪い
?> ;
効率の向上: 10倍。
不必要な置換は行わないでください。
置換を行わない場合でも、str_replace はパラメータにメモリを割り当てます。非常に遅い!解決策:
- strpos を使用して最初に (非常に高速に) 検索し、置換が必要かどうかを確認します。 必要に応じて、再度置換します。
効率:
- 置換が必要な場合: 効率はほぼ同等で、差は約 0.1% です。
- 交換が必要ない場合: strpos を使用すると 200% 高速になります。
邪悪な @ 演算子
@ 演算子を乱用しないでください。 @ は単純そうに見えますが、実際には舞台裏で多くの操作が行われています。 @ を使用する場合と使用しない場合の効率の差は 3 倍です。
特に5ループのテストではerror_reporting(0)でエラーをオフにしてループ終了後にオンにしても@を使うより速いです。
strncmp を上手に活用する
「最初の n 文字」が同じかどうかを比較する必要がある場合は、substr/strto lower や PCRE ではなく strncmp/strncasecmp を使用し、決して ereg には言及しないでください。 strncmp/strncasecmp は (それほどではありませんが) 最も効率的です。
substr_compare は注意して使用してください (PHP5 のみ)
上記の原則に従って、substr_compare は最初も substr よりも高速である必要があります。以下の場合を除き、答えはノーです。
- 大文字と小文字を区別しない比較
- より大きな文字列を比較

文字列を定数で置き換えない
理由:
- ハッシュ テーブルを 2 回クエリする必要がある
- 定数名を小文字に変換する必要がある (実行時に2 番目のクエリ)
- E_NOTICE 警告を生成します
- 一時的な文字列が作成されます
効率の差: 700%。

for ループの条件文に count/strlen/sizeof を入れないでください
ヒント: 私の個人的なアプローチ
引用:
コードをコピーします コードは次のとおりです:

// PHP CODE dZ902 による CU の強調表示
for ($i = 0, $max = count($array);$i < $max; ++$i);

効率の向上は相対値です:
- count 50%
- strlen 75%
短いコードは必ずしも速いとは限りません
引用:

コードをコピー コードは次のとおりです:
// dZ902によるCUのPHPコードハイライト
// 最長
if ($a == $b) {
$str .= $a;
} else {
$str .= $b
}
// 最長
if ($ a == $b) {
$ str .= $a;
$str .= $b;
// short
$str .= ($a == $b ? $a : $b); ?>


どれが早いと思いますか?
効率の比較:
- 最長: 4.27
- 最長: 4.43
- 最短: 4.76
信じられない?もう 1 つあります:
引用:



コードをコピー
コードは次のとおりです: // dZ902 による CU の PHP コード ハイライト
// オリジナル
$d = dir('. ');
while (($entry = $d->read()) !== false) {
if ($entry == '.' || $entry == '..') {
続ける;
}
}
// 対
glob('./*');
// 対 (. と .. を含む)
?>

どっちが速いですか?
効率の比較:
- オリジナル: 3.37
- glob: 6.28
- scandir: 3.42
- OO なしのオリジナル: 3.14
- SPL (PHP5): 3.95
ボイスオーバー: このことから、オブジェクトがPHP5 の効率性は大幅に向上していますが、その効率性は純粋な関数の効率性とそれほど変わりません。
PHP ファイルへのアクセス効率を向上
他の PHP ファイルを含める必要がある場合は、フルパス、または変換が簡単な相対パスを使用します。
引用:



コードをコピーします

コードは次のとおりです:
// dZ902 による CU の PHP コード ハイライト include 'file.php' // 悪いアプローチ
include ' ./file.php'; // 良い
include '/path/to/file.php'; // 理想的


PHP には多くの拡張機能と機能があります。 PHP にこの関数があるかどうかを確認してください。もっと簡単な実装はありますか?
引用:


コードをコピーします

コードは次のとおりです:

// dZ902 による CU の PHP コード ハイライト $filename = "./somepic.gif"; = fopen($ filename, "rb"); $contents = fread($handle, filesize($filename)); // より単純な
file_get_contents('./somepic.gif) ');
>

// dZ902 による CU の PHP コードの強調表示
$a['b']['c'] = array();
// アクセスごとに 2 つの余分なハッシュ検索が遅い
for ($i = 0; $i < 5; ++$i)
$a['b']['c'][$i] = $i; より高速な参照ベースのアプローチ
$ref =& $a[ 'b']['c'];
for ($i = 0; $i < 5; ++$i)
$ref[$i] = $i?>


;


コードをコピーします
コードは次のとおりです: // dZ902 による CU の PHP コードの強調表示
$a = 'large string'
// メモリを大量に使用するアプローチ
function a(; $str)
{
return $str.'something'
}
// より効率的な解決策
function a(&$str)
{
$str .= 'something'
?>



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

tru​​e

技術記事 1. file、fopen、feof、fgets およびその他の一連のメソッドの代わりに file_get_contents を使用できる場合は、より効率的である file_get_contents を使用するようにしてください。ただし、file_get_c には注意してください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。