2012-11-19 3 views
3

뒷이야기PHP 성능 (연산 코드 캐싱/기능 변동성)

I는 모두 큰 자체 PHP 라이브러리를 사용하여 (웹 -) 애플리케이션의 스펙트럼을 유지한다. 이러한 응용 프로그램 중 일부는 직원이 사용하는 기존 데스크톱 응용 프로그램이지만 다른 응용 프로그램 (이 질문과의 관련성이 더 높음)은 인기가 계속 커짐에 따라 성능이 중요한 문제가되는 PHP 웹 사이트입니다.

현재 PHP 캐싱 방법

우리의 웹 사이트 중 하나를 속도를 높이기 위해, 내가되고 지속적으로 필요로하지 않는 웹 사이트의 특정 부분을 캐시 memcached를을 사용 (이 가게의, thinkgeek.com으로 생각) 동적으로 구축 (특정 카테고리의 제품 목록 등)

또한 OPCode 캐시로 APC를 공장에서 기본 설치로 사용합니다.

두 가지 방법 모두 웹 사이트의 성능을 크게 향상 시키지만, 저는 최적화의 길로 나아가고 있습니다. PHP 데이터베이스 배경에서 자신을 오는

에서

기능 변동성, 난 PostgreSQL을, 예를 들어, 신뢰할 수 있고 정확한 결과를 유지하면서 엄청난 성능 향상을 얻을 수 function volatility을 사용하는 방법을 매우 좋아입니다.

내 질문에 개발자가 특정 기능 (또는 클래스 메소드)을 IMMUTABLE으로 표시하도록 허용하는 확장 기능이 있습니까? (동일한 입력 인수가 주어지면 해당 함수의 결과는 항상 동일 함을 의미). 이 캐싱 확장은 그 함수의 결과를 캐싱하여 큰 코드 라이브러리를 사용할 때 엄청난 성능 향상을 가져올 수 있습니다.

간단한 예제는 SomeClass::getWebsiteFooter();과 같은 방법으로 웹 사이트가 변경되지 않은 경우 (캐시가 플러시되지 않는 경우) 항상 동일한 HTML 코드를 반환합니다.

이와 비슷한 것이 있습니까? 나는 시장에서 원격으로 비슷한 것을 찾을 수 없었다. 내 상황에 도움이되는 성능 향상 방법이 있습니까?

+0

APC 사용자 캐시 Squid 또는 Varnish 같은보기 수준 Smarty caching 및 캐싱 프록시 캐싱을 제안? –

+0

당신이 찾고있는 기술 이름은 메모입니다 (오타가 아니라 R이 없습니다). "php memoize"를 검색 할 수는 있지만 캐싱의 자체 버전을 구현하는 것이 훨씬 낫습니다. 왜냐하면 캐시를 무효화해야하고 Denis Ermolin이 말했듯이 캐시에 저장할 수 있기 때문입니다. APC. –

+0

@ N.B. 감사! memoize라는 용어를 알지 못했습니다.꽤 큰 프레임 워크이기 때문에 memcache 조회/저장 코드의 몇 줄로 모든 것을 래핑해야하는 코드베이스가 꽤 복잡 할 것이기 때문에 (심지어 매번 3 줄이라도) . 불변으로 메소드를 표시 할 수있는 주된 이점은 (확장 기능에 의해 모든 마법이 자동으로 처리 될 수 있다는 것입니다 : ('public immutable function foo();'와 같이) 코드베이스가 복잡해지지 않는다는 것입니다. . – Staex

답변

1

웹 응용 프로그램으로 PHP 응용 프로그램을 살펴보고 여러 수준의 캐싱을 구현한다고 가정 해 보겠습니다.

IMMUTABLE 방법 - 좋은 방법이라고 생각하지 않습니다. db 수준, 응용 프로그램 수준 (memcached)에서 캐싱 사용은 좋은 시작입니다.

그럼 난

+0

좋아, 고마워. 편집자가 내가 원했던대로하고 있는게 아니야. –

+0

나는 이미 memcached (및 APC opcode-cache)를 사용하여 데이터 및 뷰 레이어에 캐싱을 구현했습니다. 하지만 응용 프로그램은 여러 응용 프로그램간에 공유되는 코드의 큰 라이브러리를 사용하기 때문에이를 개선하려고합니다. Memcached 완벽 하게이 물론 가능하지만, 나는 보드에 효과를 적용하기 위해 100 가지 방법으로 memcached 코드의 비트를 소개해야 할 것입니다. 그 대신에 메소드의 변동성을 나타내는 것이 가능하다면 코드 자체는 수정이 필요 없으며 백엔드 (PHP ext)는 모든 작업을 수행 할 수 있습니다. – Staex