문제

CLI 모드에서 실행할 때 PHP의 APC 모듈은 코드 최적화를 지원합니까?예를 들어, 다음과 같은 파일을 실행할 때 php -f <file> 실행하기 전에 파일이 APC로 최적화됩니까?APC가 구성 파일에 로드되도록 설정되어 있다고 가정합니다.또한 스크립트가 require_once 최적화도 되나요?

fastcgi 모드에서 실행할 때 최적화가 제대로 작동한다는 것을 알고 있지만 CLI에서도 작동하는지 궁금합니다.

apc_* 함수는 작동하지만 여기서 제가 추구하는 가장 중요한 코드 최적화에 대해 궁금합니다.

행복한 날, 마틱

도움이 되었습니까?

해결책

문서화 apc.enable_cli, CLI 모드에서 APC를 활성화해야 하는지 여부를 제어합니다. (인용) :

주로 테스트 및 디버깅용입니다.이렇게 설정하면 CLI에 대해 APC가 활성화됩니다 PHP 버전.정상 이하 상황에서는 이상적이지 않습니다. APC 생성, 채우기 및 삭제 모든 CLI 요청에 캐시하지만 다양한 테스트 시나리오에 유용합니다. CLI에 대해 APC를 활성화할 수 있습니다. PHP 버전을 쉽게.

어쩌면 APC가 opcode를 메모리에 저장할 수도 있지만 PHP 실행 파일이 스크립트 끝에서 종료되면 해당 메모리가 손실됩니다.스크립트 실행 사이에는 지속되지 않습니다.

따라서 APC의 opcode-cache는 CLI 모드에서 쓸모가 없습니다.PHP는 실행 파일이 실행될 때마다 PHP가 소스를 opcode로 다시 컴파일해야 하기 때문에 아무 것도 최적화하지 않습니다.


실제로 APC는 "최적화"하지 않습니다.PHP 스크립트를 실행하는 표준 방법은 다음과 같습니다.

  • 파일을 읽고 opcode로 컴파일합니다.
  • opcode를 실행

APC가 하는 일은 메모리의 opcode에 저장하는 것이므로 PHP 스크립트의 실행은 다음과 같습니다.

  • 메모리에서 opcode를 읽습니다. (소스코드를 컴파일하는 것보다 훨씬 빠릅니다)
  • opcode를 실행

그러나 이는 opcode를 저장할 메모리 공간이 있어야 함을 의미합니다.PHP를 Apache 모듈로 실행할 때 Apache는 해당 메모리 세그먼트의 지속성을 담당합니다.CLI에서 PHP를 실행하면 거기에 메모리 세그먼트를 유지할 것이 없으므로 PHP 실행이 끝나면 메모리 세그먼트가 파괴됩니다.
(정확히 어떻게 작동하는지는 모르겠지만, 제 말이 그다지 "기술적"이지 않더라도 적어도 원리적으로는 그런 것 같아요 ^^)


또는 "최적화"는 구성 지시어와 같이 opcode 캐시 이외의 다른 것을 의미합니다. apc.최적화 ?그렇다면 이것은 APC 3.0.13에서 제거되었습니다.

다른 팁

글쎄, CLI 모드에서 APC에 대한 충분한 이유가 있습니다. UnitTesting : 가능한 한 이후의 생산 환경에 가까운 환경을 사용하여 단위 테스트를하고 싶습니다. Zend Framework에는 내부 캐싱 솔루션이있어 APC의 가변 캐시를 스토리지 백엔드로 사용할 수 있습니다.

환경에 따라 구성을 생성하는 CLI 코드가있는 경우 CLI 코드는 APC가 활성화되지 않았다고 생각합니다. 예를 들어, CLI를 통해 Symfony의 DI 컨테이너를 생성 할 때 교리를 APC를 사용하지 말라고 지시합니다.세부).

또한 테스트하지는 않았지만 APC가 다음에 포함 된 파일의 스크립트 속도를 향상시킬 가능성이 있습니다. pcntl_fork(). 편집 : 나는 질문을했다 APC & pcntl_fork() 여기.

완전성을 위해 CLI (Ubuntu)에서 APC를 활성화하려면 :

echo 'apc.enable_cli = 1' > /etc/php5/cli/conf.d/enable-apc-cli.ini

CLI 모드에서 사용해야 할 또 다른 이유가 있습니다. 일부 스크립트는 캐시로 사용하십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top