2010-05-10 6 views
4

필자는 PHP의 성능에 대해 몇 가지 질문을 던졌고 느린 도구를 사용하여 특정 작업을 처리 할 수있는 복잡한 클래스를 빌드해야하는지에 대해 많은 시나리오가있었습니다.언어를 사용하는 대신 시스템의 기능을 사용하는 것이 더 좋을까요?

예를 들어, sedawk의 복잡한 정규 표현식은 PHP의 정규 표현식을 작성하는 것보다 성능면에서 기하 급수적 인 것처럼 보이며 지나치게 많은 함수가 구문 분석하여 완료 할 때까지 관리합니다. MX lookup/DIGging/retrieving과 같은 많은 네트워크 작업을 동시에 수행하려면 system()을 통해 전달하고 OS가 처리하도록하십시오. 비효율적이며 느린 페이지를 초래하거나 OS가 더 쉽게 처리 할 수있는 PHP의 기능이 너무 많습니다.

귀하의 의견은 무엇입니까?

OS를 자체적으로/맞춤 기능으로 열심히해야한다고 생각합니까?

답변

3

시스템 호출은 PHP로 작성된 솔루션을 사용하는 것보다 훨씬 빠를 수 있습니다 (PHP의 함수 자체가 C로 작성되고 컴파일됨에 따라 항상 유효하지는 않지만). 많은 PHP 핵심 기능과 확장이 매우 빠릅니다. .

속도 외에 두 번째 요인은 메모리 제한입니다. 외부 적으로 호출되는 프로세스는 PHP의 스크립트 별 제한을 없애지 않습니다. 예를 들어 대용량 파일을 작업 할 때 유용 할 수 있습니다.

또한 일부 기능은 PHP 자체에서 사용할 수 없습니다. 예를 들어, PHP 내에서 ImageMagick의 기능 세트를 모방 할 방법이 없습니다. GD 라이브러리는 ImageMagick이 제공하는 것과 거의 유사하지 않습니다.

시스템 명령을 사용하면 PHP의 아름다움의 일부인 이식성을 효과적으로 제거 할 수 있습니다. 응용 프로그램을 다른 서버로 옮기는 것은 큰 부담이됩니다. 외부 명령의 기능 집합이 동일해야하기 때문이며 OS 경계를 Windows 나 Unix로 넘어 가지 말고 다른 Linux 배포판에서도 항상 그런 것은 아닙니다. 기반의 Mac OS. 나는이 점에서 wget과 ImageMagick에 대한 경험이있어, 더 많은 것이 있다고 확신한다.

서버 환경을 완전히 제어하고 (향후 5 년 동안 어떤 종류의 서버를 구입할지 결정하는) 사용자 지정 응용 프로그램을 작성하는 경우 문제가되지 않을 수 있습니다. 당신이 이식성이 필요한 소프트웨어를 제작한다면 그것은 하나가 될 것입니다.

필자는 개인적으로 휴대 성을 잃는 것보다 외부 종속성이 필요한 기능을 잘라내는 경향이 있지만, 휴대용 응용 프로그램을 구축하는 것과 관련이 있습니다. 그것은 당신의 초점에 달려 있습니다.

+0

ImageMagick 주제 : PHP Imagick 확장 개발자 블로그에서 멋진 예제를 확인하십시오. http://valokuva.org/?cat=1 – janmoesen

0

나는 OS가 새로운 프로세스를 시작할 때마다 그러한 함수를 호출 할 때마다 속도가 느려질 것이고 그것은 시간이 오래 걸리기 때문이라고 생각한다.

0

sed/awk와 같은 다른 외부 프로그램을 사용하여 쉘에서 프로그램을 실행하려는 경우 shellscripts가 외부 프로그램을 과도하게 사용하고 쉘에서 실행되는 PHP 스크립트가 쉘 스크립트, 다른 언어로. 그러나 웹 응용 프로그램 인 경우 PHP에서 더 잘 수행하십시오. 대부분의 공유 호스팅 환경에서는 PHP 스크립트에서 외부 프로그램을 실행할 수 없습니다.

1

시스템 프로세스는 빠르게하고, 염두에 두어야 할 것이있다 (광범위한 테스트가 여기에 필수입니다) 적은 메모리를 게걸스럽게하더라도 : system() 호출을 사용하여

나는주의 것 및 제어 당신이 경우에만 사용 스크립트가 실행될 하드웨어. 이러한 호출을 사용하면 추가 소프트웨어/패키지를 설치할 필요가 생길 수 있으며 모든 OS에서 (동일한 방식으로) 작동하지 않을 수 있으므로 서버를 제어 할 수없는 경우 PHP 기능을 계속 사용하십시오.

0

(내 경험으로는 "시스템 호출"은 일반적으로 다른 프로그램을 호출하지 않고 "시스템 호출 (시스템 호출)"을 말합니다 - "시스템()을 통해 전달하고 OS가 처리하게하십시오"- 같은 생각을하는 것처럼 보이지만 언급 한 프로그램은 OS 서비스이며 다른 프로그램들입니다.

PHP는 기본적으로 스크립팅 언어입니다 - 통상적으로 다른 프로그램간에 데이터를 이동하는 단지 접착제하지만, 몇 가지 고려해야 할 :

1) 성능 - 계산 비용이 될 수있는 새로운 프로세스를 분기

2) 보안 - 심지어 권한에 의해 제한 시스템 (모든 프로그램을 웹 서버 무제한 액세스 권한을 부여)은 잠재적으로 매우 위험

3) 마음에 베어링 (2) 예방하거나 당신이 할 수있는 일이 제한됩니다 대부분의 구성

4) 대규모 개발의 경우 이것은 매우 위험합니다. 프로그래머가 원하는 언어로 코드를 작성한 다음 PHP를 맨 위에 놓으면 많은 언어로 작성된 응용 프로그램이 될 것입니다.

내가 믿고 수도 있지만

를 검색하는 I는 MX 조회/파고와 같은 네트워크 작업을 많이 할 것 인 경우에 당신은 아주 쉽게

자신의 네이티브 코드 PHP 확장을 쓸 수

5)/awk를 사용하여 큰 데이터 세트를 매쉬/sed가 네이티브 PHP 코드보다 빠르거나 더 효율적일 수 있습니다. DNS 조회가 다른 클라이언트를 사용하는 것이 더 빠르다는 사실이 놀랍습니다. 어떻게 측정 했습니까?

관련 문제