문제

Perl을 사용하는 웹 앱에서 작업 중이며 앱의 일부 속도를 높이어야합니다.

나는 내가 조사하고 싶은 부분에 대한 특정 요구를 프로파일 링하기 시작했다고 생각했다. Perl 코드 프로파일 링에 대한 검색을 수행했지만 불행히도 내가 찾은 대부분의 내용은 Perl 코드를 -d:DProf myapp 명령 줄에서. 내 코드가 웹 앱 내에 있기 때문에 그것은 나에게 효과가 없습니다. 나는 프로파치와 함께 프로파일 링을 할 수있는 방법을 찾았지만 불행히도 프로파일 러에서 돌아온 "가장 많이 사용 된"모듈은 모두 CPAN 모듈 (클래스 :: xyz 등) 등이 굉장히 도움이되지 않았습니다.

누구든지 "타이머"코드를 이러한 방법만을 타겟팅하기 위해 프로파일 링하려는 메소드에 "타이머"코드를 주입하는 것 외에 좋은 방법을 아는 사람이 있습니까? 나는 테스트 스크립트를 작성하고 프로파일 링을 생각했지만 내가하고있는 코드의 특성으로 인해 내가 원하는 것보다 조금 더 많은 작업이 필요합니다.

도움이 되었습니까?

해결책

당신은 시도 했습니까? 개발 :: NYTPROF (Devel :: dprof보다 훨씬 낫다)는 Apache에서 작동 할 수 있습니까? 어떤 웹 서버를 사용하고 있습니까? 이것은 바닐라 CGI 스크립트, mod_perl 또는 다른 것입니까?

데이터베이스 작업을 수행하는 경우 DBI :: 프로필 다른 프로그램에서 발생하는 작업 인 쿼리를 벤치마킹 할 수 있습니다.

그러나 진짜 속임수는 코드를 구성하여 코드를 구성하여 테스트 및 프로파일 링을 모두 결합하지 않고도 모든 것을 결합하여 무언가가 느리다는 것을 알 수 있습니다. 그것은 단기적으로 화재와 싸우는 데 큰 도움이되지는 않지만 장기적으로 화재가 발생하지 않도록합니다. 웹 서버 환경 등을 속이는 다양한 방법이 있지만 다른 질문입니다. :)

다른 팁

CGI.PM을 사용하는 경우 명령 줄의 PERL 스크립트에 인수를 전달할 수 있으며 CGI.PM은 마치 HTTP의 매개 변수로 전달 된 것처럼 해석합니다. 따라서 디버깅을하는 경우, 예를 들어

http://example.com/scripts/example.pl?action=browse&search=grommet&restrict=blah

그런 다음 명령 줄에서 전화 할 수 있습니다.

perl -d:NYTProf DocumentRoot/scripts/example.pl 'action=browse&search=grommet&restrict=blah'

당신은 사용할 수 있습니다 기준 핵심 모듈 : Hireswallclock 옵션 내부적으로 시간을 내고 싶다면 옵션. 그러나 실제로, 당신은 명령 줄에서 프로파일을 할 수 있어야합니다. CGI 요청의 특정 부분을 모방하기 위해 테스트 스크립트를 작성해야 할 수도 있지만 DPROF는 다음과 같습니다. 극도로 성능 병목 현상을 찾을 때 유용합니다.

특히 코드가 CPAN 모듈 코드를 호출하는 위치를 찾으십시오. 필요한 것보다 훨씬 더 많은 루프 에서이 작업을 수행 할 수 있으므로 CPAN 모듈에서 시간이 소비되는 동안 코드를 리팩토링하면 문제가 해결 될 수 있습니다.

이 시점에서 조금 늦었다는 것을 알고 있지만 이것이 사용하기에 좋은 이유 중 하나입니다. CGI :: 응용 프로그램 또는 웹 앱이 실제 기능을 구현하기 위해 작성한 많은 모듈을 사용하는 매우 짧은 웹 경제 코드 인 또 다른 아키텍처. 이러한 디자인을 사용하면 웹 측면에 대해 걱정할 필요없이 개별적으로 또는 집합 적으로 명령 줄의 모든 모듈을 프로필 (또는 간단히 테스트)하기가 매우 간단합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top