2012-08-27 4 views
1

이 질문으로 저는 PHP의 내부 동작을 조금 더 잘 이해하고 있습니다.에는 선택적으로 또는 전 세계적으로?

50K 라이브러리가 있다고 가정합니다. 라이브러리에는 여기저기서 사용할 수있는 편리한 기능들이로드되어 있습니다. 또한 이러한 기능은 사이트의 페이지 중 10 %가 필요/사용한다고 가정합니다. 그러나 홈 페이지에는 확실히 필요합니다.

이제는 라이브러리를 필요로하지 않는 90 %를 포함하여 모든 페이지가 가져올 수 있도록이 라이브러리를 가리키는 전역 포함을 사용해야합니다. 필요한 페이지에만 포함 참조를 선택적으로 추가해야합니까?

이 질문에 대답하기 전에, 내가 "왜"당신이 참조를 포함 할 때 나는이 질문에 ...

에게, PHP는 캐싱 할 수있다 지적 할 수 있습니다. 따라서 매번 대립하는 것과는 달리 일회성 거래 일 수도 있습니다. 한 번 그 한 번 방해가되면, 이후로드는 생각만큼 나쁜되지 않을 수 있습니다. PHP가 배포하는 스마트 캐싱 메커니즘 때문에 그게 전부입니다 - 제가 깊이 지식이 없으므로 궁금한 점이 있습니다 ...

앞 페이지에는 해당 라이브러리가 필요하기 때문에 인수는 왜 라이브러리를 보관하지 않는 것이 좋을까요? 따뜻하고 신선한가 메모리에 저장되어 전체적으로 제공 되나요?

이 질문에 대답 할 때, 캐싱/성능 측면에서 면밀히 검토하지 말고, 토론이 프로그래밍 스타일로 이동하는 것을 막으려면하지 말아야합니다.

감사합니다.

답변

1

측정하십시오.

OS가 캐쉬 할 것이기 때문에 첫 번째 히트 이후 캐싱이 이익을 얻지 만 I/O 히트만을 저장하기 때문에 캐싱이 이익을 얻습니다. 그러나 처리가 계속됩니다. "Hello World"페이지에 50K의 코드를 포함 시키면 아무 것도 실행하지 않더라도 50K 소스를로드하고 구문 분석하기 위해 CPU 및 메모리 패널티를 지불하게됩니다. 처리의 해당 부분은 어떤 식 으로든 캐시되지 않을 가능성이 큽니다.

일반적으로 CPU는 현재 상당히 저렴하기 때문에 "절약 할 가치가 없을"수 있습니다. 하지만 그 때문에 실제로 측정해야하므로 직접 결정할 수 있습니다.

1

캐싱은 APC와 같은 opcode 캐싱이 될 것이라고 생각합니다. 이렇게하면 PHP가 매번 소스를 해석 할 필요가 없습니다. 당신은 여전히 ​​당신이 사용하고있는 각각의 include 나 require에 대해 약간의 히트를 취합니다. 한 가지 패러다임은 절차 기능을 폐기하고 __autoload()을 통해로드 된 클래스를 사용하는 것입니다. 따라서 대규모 앱을 사용하면 간단한 주문형 (on-demand) 전략이 가능합니다. 또한 당신이 염려하는 경우 이것을 측정해야한다는 Will과 동의하십시오. 조기 최적화는 결코 도움이되지 않습니다.

1

성능에 대한 귀하의 우려에 진심으로 감사드립니다.

최상의 답변을 얻으려면 조건부로 파일을 필요로하는 페이지에만 포함 시키십시오.

PHP의 opcode 캐시는 두 캐시 파일 모두를 캐시 된 형식으로 유지하므로 다른 유형의 캐시를 사용할 때처럼 캐시를 "웜"으로 유지할 필요가 없습니다.캐시는 메모리 제한 (50K 스크립트의 문제점은 아 T)이있을 때까지 유지되고, 소스 파일이 갱신되며, 캐시를 수동으로 지우거나 서 v가 다시 시작됩니다.

그렇다면 opcode (PHP 바이트 코드) 캐싱은 PHP 구문 분석 프로세스의 일부일뿐입니다. 스크립트가 실행될 때마다 바이트 코드가 처리되어 스크립트 내에서 정의되고 선택적으로 사용되는 함수, 클래스, 객체 및 기타 인스턴스 변수를 빌드합니다. 이 모든 것이 합산됩니다.

이 경우 간단한 변경으로 성능이 크게 향상 될 수 있습니다. 초록색 일 때마다주기가 중요합니다.

관련 문제