2010-07-25 2 views
5

필자는 재 작성 과정에 있으며 맞춤법으로 작성된 MVC PHP 프레임 워크를 가지고 있으며 성능 및 마법 방법에 대해 질문을 가지고 있습니다. 프레임 워크의 모델 부분에서 __get/__set 마법 메서드를 사용하면 너무 많은 성능 저하가 발생하여 사용 가치가 있다고 생각했습니다. 나는 모델 데이터에 접근 (읽기 및 쓰기)하는 것이 가장 일반적인 일들 중 하나가 될 것이라는 것을 의미한다. __get/__set MVC 프레임 워크의 모델 부분과 같이 사용 빈도가 높은 기능에 비해 성능이 너무 높습니다.PHP로 __get/__ set/__ 호출 성능 질문

+0

다른 방법으로 그들을 사용하려고 시도해야하며, 필요한 경우에만 사용하십시오. 느린 것 외에도, 그들은 제 의견으로는, 읽고 유지하기가 더 어렵습니다. –

답변

8

측정하십시오.

PHP에서 함수 호출이 비싸다는 점을 고려할 때 확실히 성능이 크게 향상됩니다. 이 차이점은 선언 된 인스턴스 속성에 대한 일반 액세스를 훨씬 빠르게 만드는 최적화를 구현하는 PHP의 다음 버전에서 훨씬 더 커질 것입니다.

즉, PHP는 거의 병목 현상이 아닙니다. I/O 및 데이터베이스 쿼리는 자주 더 많은 시간이 걸립니다. 그러나 이것은 사용법에 달려 있습니다. 벤치마킹을 확실히하는 유일한 방법.

또한 마법 방법의 다른 가독성 문제입니다. 그들은 종종 하나의 커다란 switch 문으로 변성되어 코드 완성을 손상시킵니다. 둘 다 프로그래밍 생산성에 영향을 미칠 수 있습니다.

+3

일부 IDE는 @method (http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.method.pkg.html)로 수업에 주석을 달 때 마법 방법에 대한 코드 완성을 허용합니다. – Gordon

+0

[좋은 YouTube에서 PHP 내부보기] (http://www.youtube.com/watch?v=p5S1K60mhQU). – alex

3

필자의 경험으로 보았을 때 오버 헤드가 꽤 많이 추가되었습니다. 약 4000 __get (예, 해당 페이지에 꽤 많은 데이터가 있음) 페이지에서 성능이 상당히 느리게 떨어졌고, 용인 할 수 없게되었습니다. 다른 데이터를 변경하지 않거나 외부 종속성 (외래 키와 같은)을 검사 할 필요가없는 변수에 대해 __set의 & __get을 버렸습니다. 그 후 해당 페이지를 생성하는 시간은 시간의 약 15 %였습니다. 그것은 전에했다.

0

나는이 동일한 질문을 던지고 같은 결론에 도달했습니다. 전통적인 방식으로 속성을 설정하는 것이 좋습니다. __get() + 거대한 스위치로 모든 작업 속도가 느려집니다.

7

벤치 마크가있는 an article (3 살)입니다. 자체 테스트를 실행하여 코드에 미치는 영향을 확인하십시오.

일반적으로 말하면 훨씬 느립니다. 하지만 병목 현상이 있습니까? 그것은 당신이하는 일에 달려 있습니다. 속도가 걱정된다면 어디에서 멈출까요? foreach 루프는 for 루프보다 느리지 만 대부분의 사람들은 for을 사용하기 위해 코드를 모두 다시 작성하지 않습니다.

PHP를 사용한다는 것은 코드 속도가 그다지 중요하지 않다는 것을 의미합니다. 개인적으로, 어떤 스타일로든 프로그램하기가 더 쉽습니다.