PHPプロジェクトでは、メイン関数またはメイン実行プロセスの効率が全体的なパフォーマンスに直接影響します。ハードウェアのアップグレードに加えて、ランニングの遅い問題に遭遇する場合、コード自体の最適化がより重要です。この記事では、PHPの実行効率を改善して、メイン機能の動作をスピードアップするのに役立ついくつかの実用的な方法を紹介します。
時間のかかる計算またはデータリクエストの場合、キャッシュによって繰り返し実行されることを回避できます。一般的なキャッシング方法には、ファイルキャッシュ、メモリキャッシュ(Redis、Memcachedなど)などが含まれます。
サンプルコード:
<?php
$cacheFile = '/tmp/cache.txt';
// キャッシュが存在し、有効期限が切れていないかどうかを確認してください
if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < 3600) {
$result = file_get_contents($cacheFile);
} else {
// シミュレーションの時間式操作
$result = file_get_contents('https://gitbox.net/api/data');
file_put_contents($cacheFile, $result);
}
echo $result;
?>
キャッシュを介してネットワークリクエストまたは複雑な操作を削減し、プログラムの応答速度を大幅に改善します。
PHPで機能する頻繁な呼び出しは、オーバーヘッドを引き起こします。ループで複雑な関数を呼び出したり、事前に結果を計算したりしないようにしてください。
<?php
$data = range(1, 10000);
// お勧めしません:ループで関数を呼び出す
foreach ($data as $item) {
echo strlen("Value: $item") . "\n";
}
// 最適化:事前に長さを計算します
$prefix = "Value: ";
$prefixLen = strlen($prefix);
foreach ($data as $item) {
echo $prefixLen + strlen((string)$item) . "\n";
}
?>
関数呼び出しの数を減らすと、CPU負荷が減少する可能性があります。
大量のデータを処理する場合、ジェネレーターはデータ生成を遅らせ、一度に大量のメモリの読み込みを避けることができます。
<?php
function getLargeDataset() {
for ($i = 0; $i < 1000000; $i++) {
yield $i;
}
}
foreach (getLargeDataset() as $value) {
// データの処理
if ($value > 10) break; // 早めに終了します
}
?>
ジェネレーターは、メモリが少ない同じタスクを行います。
PHPビルトイン関数は通常、基礎となるレベルに最適化されており、PHP手書きコードよりもはるかに速く実行されます。たとえば、ループの代わりにarray_map 、 array_filter 、 array_reduceなどを使用します。
<?php
$numbers = [1, 2, 3, 4, 5];
// 手書きループ
$squares = [];
foreach ($numbers as $n) {
$squares[] = $n * $n;
}
// 最適化版
$squares = array_map(fn($n) => $n * $n, $numbers);
?>
組み込み機能を使用すると、コードはより簡潔で効率的です。
Opcacheは、PHPの公式Bytecodeキャッシュ拡張機能であり、実行されるたびにスクリプトを再コンパイルすることを避けることができ、実行効率を大幅に改善します。
Open Method(php.ini):
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
php -i |を実行しますコマンドラインでgrep opcacheを使用して、opcacheが有効になっているかどうかを確認します。
同じファイルが複数回ロードされ、オーバーヘッドを削減するために、要求またはinclude_onceを要求またはinclude_onceを使用するか、 includedをcontermentします。
<?php
require_once 'config.php';
require_once 'functions.php';
// コードの実行を続けます
?>