PHP를 축소하는 것이 중요합니까?


101

나는 당신 PHP 축소 할 있다는 것을 알고 있지만, 어떤 점이 있는지 궁금합니다. PHP는 해석 언어이므로 컴파일 된 언어보다 약간 느리게 실행됩니다. 내 질문은 다음과 같습니다. PHP를 축소하면 클라이언트가 페이지로드 속도가 눈에 띄게 향상되는 것을 볼 수 있습니까?

또한 PHP 또는 이와 유사한 것을 컴파일하는 방법이 있습니까?


한 가지 분명한 점은 난독 화 (obfuscation)로, 유효한 목표가 될 수있는 코드의 이식성을 떨어 뜨립니다.
John

답변:


161

PHP는 바이트 코드로 컴파일 된 다음 VM과 유사한 것 위에서 해석됩니다. 다른 많은 스크립팅 언어는 Perl과 Ruby를 포함하여 동일한 일반 프로세스를 따릅니다. 예를 들어 BASIC과 같은 전통적인 해석 언어가 아닙니다.

소스를 "축소"하려고하면 효과적인 속도 증가가 없습니다. APC와 같은 바이트 코드 캐시 를 사용하면 크게 증가 할 수 있습니다.

Facebook은 PHP 소스를 C ++ 코드로 변환하는 HipHop 이라는 컴파일러를 도입했습니다 . PHP의 거물 중 한 명인 Rasmus Lerdorf는 올해 초 HipHop의 성능 향상을 다루는 Digg프레젠테이션을 했습니다. 간단히 말해, 코드를 최적화하고 바이트 코드 캐시를 사용하는 것보다 빠르지 않습니다. HipHop은 대부분의 사용자에게 과잉입니다.

Facebook은 또한 최근 HipHop을 만드는 작업을 기반으로하는 새로운 가상 머신 인 HHVM을 공개 했습니다 . 여전히 새롭고 일반 대중에게 주요 성능 향상을 제공할지 여부는 명확하지 않습니다.

명시 적으로 명시되어 있는지 확인하기 위해 해당 프레젠테이션 을 전체적으로 읽으십시오 . 또한 Facebook의 xdebugxhprof 와 같은 도구를 사용하여 코드를 벤치마킹하고 프로파일 링하고 병목 현상을 식별하는 다양한 방법을 지적합니다 .


2
전체 바이트 코드 / vm 것은 실제로 외부 (!) 바이트 코드 캐시 없이는 아무것도 사지 않습니다. PHP 멀리 기본적으로 바이트 코드를 던지는 유지하는 이유는 ...하지 않습니다

공유 호스팅 문제라고 생각합니다. APC는 이전 6.0 기반 트렁크부터 기본적으로 PHP에 포함되어 있습니다. 5.4에서 기본적으로 볼 수 있는지 또는 새 트렁크가 호출되는 것이 무엇인지 잘 모르겠습니다 ...
Charles

정보를 주셔서 대단히 감사합니다. 불행히도 나는 내 서버를 세밀하게 제어 할 수 없습니다 (임대). 웹 호스트가 APC를 사용할 가능성이 있습니까?
Bojangles

3
대부분의 공유 호스팅 제공 업체는 APC를 사용하지 않습니다. 구성을 제어 할 수 있도록 가상 사설 서버를 조사해야합니다. VPS는 일반적인 공유 호스팅보다 비싸지 만 실제 전용 서버보다 훨씬 저렴합니다. 인기있는 VPS 제공 업체에는 Slicehost 및 Linode가 있습니다. 먼저 코드를 벤치마킹하고 프로파일 링해야한다는 것을 잊지 마십시오 !
Charles

15

PHP Accelerator, 또는 같은 opcode 캐시를 사용하기 위해 PHP를 축소하는 아이디어를 포기하십시오 APC.

또는 다른 것 memcached


18
나는 "다른 것"이라고 말했다.
Stephen

3
opcode 캐시가 아닌 다른 것을 의미한다는 것은 분명하지 않습니다.
Treffynnon 2010

5
memcached는 성능을 향상시키는 완벽한 방법입니다. 벤치마킹 및 프로파일 링을 수행하고 캐싱 자체가 가능한 최고의 성능 이득이 될 것임을 확인한 후.
Charles

1
PHP 5.5를 사용하는 경우 기본적으로 제공되므로 opcode 캐시를 설치할 필요가 없습니다.
방화벽

1
사실 :( cromulent을 보았다 나는이 상황에서 memcached를이 오해의 소지 사용하여 다른 사람과 동의 캐싱 데이터를 컴파일 과정의 일부 결과 연산 코드와 동일하지 않습니다으로...
마이크 퍼셀

3

일부 재 작성 (더 짧은 변수 이름)을 사용하면 몇 바이트의 메모리를 절약 할 수 있지만 그다지 중요하지 않습니다.

그러나 포함 스크립트를 함께 연결할 수있는 방식으로 일부 애플리케이션을 디자인합니다. 이를 통해 php -w크게 압축 할 수 있으므로 스크립트 시작에 약간의 속도 향상이 추가됩니다. 그러나 opcode 사용 서버에서는 몇 개의 파일 mtime 검사 만 저장합니다.


3

이것은 광고보다 답이 아닙니다. 저는 Zend opcode를 정적 타이핑으로 VM에서 실행되도록 변환하는 PHP 확장을 작업 중입니다. 임의의 PHP 코드를 가속화하지 않습니다. 일반 PHP가 허용하는 것보다 훨씬 빠르게 실행되는 코드를 작성할 수 있습니다. 여기서 핵심은 정적 타이핑입니다. 최신 CPU에서 동적 언어는 왼쪽 및 오른쪽 분기 예측 오류를 잡아 먹습니다. PHP 배열이 해시 테이블이라는 사실은 또한 많은 분기 오류 예측, 비효율적 인 캐시 사용, 빈약 한 메모리 프리 페칭, SIMD 최적화 없음 등 높은 비용을 부과합니다. 특히 분기 예측 오류와 캐시 미스는 오늘날의 프로세서에있어 아킬레스 건입니다. 내 작은 VM은 해시 테이블 대신 정적 유형과 C 배열을 사용하여 이러한 문제를 회피합니다. 결과는 대략 10 배 더 빠르게 실행됩니다. 이것은 바이트 코드 해석을 사용하고 있습니다. 확장은 선택적으로 gcc를 통해 함수를 컴파일 할 수 있습니다. 이 경우 2 ~ 5 배 더 빠른 속도를 얻을 수 있습니다.

관심있는 사람을위한 링크는 다음과 같습니다.

https://github.com/chung-leong/qb/wiki

다시 말하지만 확장은 일반적인 PHP 가속기가 아닙니다. 특정 코드를 작성해야합니다.


2

예 (비 기술적) 포인트가 하나 있습니다.

호스팅 업체는 자신의 서버에서 코드를 감시 할 수 있습니다. 당신이 그것을 축소하고 무시한다면, 당신의 아이디어를 훔치는 것은 스파이들에게 더 어렵습니다.

PHP를 축소하고 추방하는 한 가지 이유는 스파이 보호 때문일 수 있습니다. 추악한 코드는 자동 배포의 한 단계 여야한다고 생각합니다.


1

PHP 컴파일러가 있습니다 . 목록 은 이전 질문 을 참조하십시오 . 하지만 (페이스 북의 규모가 아니거나 클라이언트 측을 실행하도록 애플리케이션을 대상으로 지정하지 않는 한) 일반적으로 가치보다 훨씬 더 많은 문제가 발생합니다.

간단한 opcode 캐싱은 관련된 노력에 대해 더 많은 이점을 제공합니다. 또는 코드를 프로파일 링하여 병목 현상을 식별 한 다음 최적화하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.