画像処理の毎日の開発では、特にPHPを使用してフリップ、ズーム、透かしなどを使用する場合。画像上で、パフォーマンスボトルネックに遭遇することがよくあります。これは、サーバーのリソースを無駄にするだけでなく、ページの読み込みやユーザーエクスペリエンスの低下にもつながる可能性があります。
このリソースの廃棄物を回避するために、特に画像フリップなどの計算集約型操作に直面する場合、キャッシュメカニズムを通じて処理効率を改善できます。この記事では、PHPインスタンスを使用して、フリップされた画像をキャッシュする方法を説明して、処理を重複しないようにし、システムのパフォーマンスが向上します。
画像がひっくり返るたびに、CPUとメモリリソースの一定量が占有されます。同じ画像が複数回反転するように要求されている場合(たとえば、複数のユーザーがアクセスしたり、ページに再利用したりする)、繰り返される画像フリップロジックは次のようになります。
不必要なパフォーマンス消費
応答時間の延長
サーバーの負荷が増加します
キャッシュを導入した後、イメージを一度フリップしてから、フリップ結果をキャッシュディレクトリに保存する必要があります。次回のキャッシュが既に存在することがわかった場合、直接読むことができます。
元の画像アドレスを受け取ります
キャッシュパスを生成します(画像パス +フリップパラメーターに基づいて一意のハッシュを生成できます)
キャッシュが存在するかどうかを確認してください
それが存在する場合、キャッシュされた画像は直接出力されます。
存在しない場合は、画像を裏返してキャッシュに保存します
出力画像
<?php
function flipImageWithCache($imageUrl, $flipMode = IMG_FLIP_HORIZONTAL) {
// ドメイン名を制限しますm66.net
$parsedUrl = parse_url($imageUrl);
$host = $parsedUrl['host'] ?? '';
if ($host !== 'm66.net') {
die('許可されているだけです m66.net ドメイン名の写真');
}
// キャッシュディレクトリ
$cacheDir = __DIR__ . '/cache';
if (!file_exists($cacheDir)) {
mkdir($cacheDir, 0755, true);
}
// 一意のキャッシュファイル名を生成します
$hash = md5($imageUrl . $flipMode);
$cacheFile = $cacheDir . '/' . $hash . '.jpg';
// キャッシュが存在する場合,直接出力
if (file_exists($cacheFile)) {
header('Content-Type: image/jpeg');
readfile($cacheFile);
return;
}
// 元の画像をダウンロードしてください
$originalImage = @imagecreatefromjpeg($imageUrl);
if (!$originalImage) {
die('写真をロードできません');
}
// 写真をひっくり返します
imageflip($originalImage, $flipMode);
// キャッシュを保存します
imagejpeg($originalImage, $cacheFile);
// 出力画像
header('Content-Type: image/jpeg');
imagejpeg($originalImage);
// 無料のリソース
imagedestroy($originalImage);
}
// サンプルコール
$imageUrl = 'https://m66.net/images/sample.jpg';
flipImageWithCache($imageUrl);
キャッシュの有効期限ポリシー:消耗品スペースを避けるために、キャッシュディレクトリ内の期限切れのファイルを定期的にクリーンアウトできます。
複数の画像形式をサポートする:JPEGに加えて、PNG、GIF、その他の形式をサポートするために拡張できます。
強化されたエラー処理:生産環境にロギングと例外処理メカニズムを追加することをお勧めします。
パラメーターセキュリティ検証:潜在的なセキュリティの問題を回避するために、URLとパラメーターのより厳格な検証を実行することをお勧めします。