매일 PHP 개발에서 Parse_url은 URL 문자열을 구문 분석하고 구성 요소를 반환하는 매우 일반적인 기능입니다. 이 기능 자체가 빠르지 만, 다량의 URL을 배치 처리 할 때와 같은 일부 고주파 호출 시나리오에서는 동일한 URL의 빈번한 반복이 불필요한 성능 오버 헤드를 유발합니다.
이 중복 계산을 피하기 위해 캐시 메커니즘을 통해 parse_url 의 결과를 저장할 수 있습니다. 이 기사는 PHP 응용 프로그램의 성능을 향상시키기 위해 간단하고 효율적인 방법으로 parse_url 의 결과를 캐시하는 방법을 자세히 소개합니다.
Parse_url 은 내장 된 PHP 기능이며 실행 효율이 높지만 문자열 구문 분석, 일반 매칭 및 기타 작업을 수행합니다. 시스템이 여러 곳에서 동일한 URL을 반복적으로 처리하는 경우 매번 Parse_url을 호출하는 것은 실제로 폐기물입니다. 캐시 된 구문 분석 결과를 통해 다음을 수행 할 수 있습니다.
반복되는 구문 분석을 피하십시오.
CPU 오버 헤드를 줄입니다.
특히 주기적이거나 높은 일환 환경에서 전반적인 성능을 향상시킵니다.
아래에서는 parse_url 결과의 메모리 수준 캐시 처리에 대한 간단한 기능 캡슐화를 제공합니다.
function cached_parse_url(string $url): array|false {
static $cache = [];
// 해시를 캐시 키로 사용하십시오,피하다 URL 너무 긴 배열 키를 일으키는 원인입니다
$key = md5($url);
if (isset($cache[$key])) {
return $cache[$key];
}
$parsed = parse_url($url);
if ($parsed !== false) {
$cache[$key] = $parsed;
}
return $parsed;
}
이 함수의 핵심은 정적 변수 $ 캐시 이며,이 기능의 범위 내에서 전역으로 공유되므로 함수가 여러 번 호출 되더라도 캐시가 동일한 URL 인 한에 맞습니다.
$urls = [
'https://gitbox.net/path?query=1',
'https://gitbox.net/path?query=1',
'https://gitbox.net/otherpath?query=2',
];
foreach ($urls as $url) {
$parts = cached_parse_url($url);
print_r($parts);
}
위의 예에서는 세 개의 URL이 있지만 그 중 하나는 중복이며 Cached_Parse_URL은 한 번만 구문 분석하고 두 번째는 캐시 결과를 직접 반환합니다.
대형 또는 크로스 요청 캐시 요구 사항의 경우 APCU를 사용할 수 있습니다.
function cached_parse_url_apcu(string $url): array|false {
$key = 'parsed_url_' . md5($url);
$cached = apcu_fetch($key);
if ($cached !== false) {
return $cached;
}
$parsed = parse_url($url);
if ($parsed !== false) {
apcu_store($key, $parsed);
}
return $parsed;
}
APCU를 사용하면 캐시는 웹 응용 프로그램 또는 CLI 스크립트의 성능 최적화에 적합한 여러 요청 라이프 사이클을 통과 할 수 있습니다.
Parse_url은 유효하지 않은 URL이 구문 분석되면 False를 반환합니다. 캐시 전에 결과를 판단하는 것이 좋습니다.
캐싱 메커니즘 자체는 메모리 리소스를 차지하며 일회성 URL을 캐시하는 것이 좋습니다.
다중 스레드 또는 동시 환경에서 APCU를 사용하는 경우 스레드 안전을 보장해야합니다.
parse_url 은 사소한 기능이지만 고주파에서 호출 할 때 성능 소비를 무시할 수 없습니다. 간단한 캐싱 메커니즘을 도입함으로써 우리는 구문 분석 정확도를 보장하면서 시스템의 자원 오버 헤드를 크게 줄일 수 있습니다. 캐시의 힘은 또한 세부 사항으로 큰 가치를 보여줄 수 있습니다. 성능 최적화 요구 사항이있는 PHP 프로젝트의 경우이 최적화는 실습이 매우 가치가 있습니다.