이미지 처리의 일일 개발, 특히 PHP를 사용하여 뒤집기, 확대 / 축소, 워터 마크 등을 개발할 때 이미지에서는 종종 성능 병목 현상이 발생합니다. 이것은 서버 리소스를 낭비 할뿐만 아니라 페이지로드 속도가 느리고 사용자 경험이 나빠질 수 있습니다.
이 자원 폐기물을 피하기 위해 캐싱 메커니즘 , 특히 Picture Flip과 같은 계산 집약적 인 작업에 직면 할 때 처리 효율성을 향상시킬 수 있습니다. 이 기사는 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 및 매개 변수의 엄격한 검증을 수행하는 것이 좋습니다.