opcode 캐시로 APC를 사용하고 있습니다. APC에 파일이 존재하지 않는 것을 캐시 할 수있는 방법이 있습니까? apc.stat = 0
및 apc.include_once_override = 1
을 설정했습니다. 파일 시스템에 없을 수도있는 파일에 include_once
을 호출하는 성능을 향상시키기 위해 할 일이 더 있습니까? 그것이 존재한다면 분명히 우리는 그것을 포함시키고 자한다. 그러나 존재하지 않는다면 은 결코 존재하지 않으며이 존재할 것이고 PHP가 확인을 요청할 때마다 파일에 open()
을 호출하는 것을 원하지 않을 것입니다.APC 및 누락 된 파일의 opcode 캐싱
몇 가지 배경에 대해 : 우리는 하나의 기본 사이트를 가지고 있지만 고객별로 고객 사이트별로 사용자 정의를 제공합니다. 일부 고객은 사용자 정의 로그인 페이지가 있고 다른 페이지는 완전히 고유 한 페이지가 있습니다.
우리는 필요에 따라 컨트롤러를 무시할 수있는 약간 특별한 방법으로 Zend Framework를 사용하고 있습니다. 우리 사이트에는 LoginController
이라는 컨트롤러가 파일 controllers/LoginController.php
에 정의되어있을 수 있습니다. 그러나 고객 "Company"는 사용자 정의 로그인 페이지에 대한 요구 사항을 가질 수 있으므로 Company_LoginController
이라는 새 클래스를 디렉토리 controllers/company/LoginController.php
에 정의하여 작성합니다. 파일이있는 경우
include_once APPLICATION_PATH . '/controllers/company/LoginController.php';
if (class_exists("Company_LoginController")) {
echo 'customer-specific controller exists';
} else {
include_once APPLICATION_PATH . '/controllers/LoginController.php';
echo 'customer-specific controller does not exist; using default';
}
: (.이 명명 규칙은 우리가 "모듈"의 젠드 프레임 워크의 개념과 일치 할 수 있습니다)
우리가 클래스를 처리 할 때, 우리는 기본적으로 같은 것을 할 /controllers/company/LoginController.php
이 있으면 APC는 첫 번째 요청에서이를 캐시에 저장하고 파일 시스템에서 다시 가져 오지 않습니다. 그러나 /controllers/company/LoginController.php
파일이 이 아니고이 아닌 경우 APC에서이 파일의 존재를 두 번 이상 확인하지 않으려합니다. 이런 일이 일어날 수있는 방법은 없나요?
하면 .. 그 도움이 그럼에도 불구하고 희망 (또는 아마도 간단한 포함), 임시 파일을 삭제하십시오. 그러나 그것은 약간의 해킹 일 것입니다. –
아, 이것은 생각하지 못했던 자세입니다 (파일을 생성 한 후 다시 삭제하는 등). 해킹 비트이기 때문에 다른 devs에서 얼마나 잘 처리되는지 확신하지 못합니다. –
빈 파일을 전송한다는 생각은 잘못되었습니다. 그러나 즉시 파일을 만드는 모든 솔루션에는 더 많은 코드가 포함됩니다.이 코드는 file_exists()에 대한 호출을 포함하며 APC를 사용하는 것이 이러한 호출을 피하는 것이라고 가정합니다. 또한 clearstatcache (해당 캐시를 사용하는지 APC가 사용하는지 여부는 알 수 없음)에 대한 호출이있을 수 있습니다. – jmucchiello