2013-12-14 3 views
4

필자는 Perl 파서를 몇 년 동안 켜고 끄는 작업을 해왔다.하지만 항상 사전 알파 상태 였으므로, 속도를 걱정하지는 않았다. 그러나, 나는 그것을 최적화하는 방법에 대한 연구를 시작했고, 내가 발견 한 것에 놀랐다.펄 시작 시간을 줄이는 가장 좋은 방법

일부 알고리즘 및 정규식 최적화 후 정상적인 실행에는 약 3.5 초가 걸리며 그 중 약 2.3 시간은 Perl이 시작될 때 걸리는 시간입니다 ("time perl scriptname.pl" die ("Done"); "첫 줄에). 나는 Regexp :: Grammars가 가장 빠른 Perl 모듈이 아니라는 것을 이해한다. 그러나 초기화는 실제로 스크립트를 실행하는 것보다 훨씬 오래 걸리는 것으로 보인다.

따라서 바이트 코드를 실행하기 전에 컴파일하기 쉬운 방법을 살펴보기 시작했습니다. B :: Bytecode는 더 이상 유지 보수가되지 않거나 주 Perl 배포판에 포함되지 않습니다. 시작 시간을 줄일 수있는 쉬운 방법이 있습니까?

감사합니다.

+1

파서가 Regexp :: Grammars 외에 어떤 모듈을 사용합니까? – DavidO

+0

Regexp :: Grammars 컴파일은 내 시스템에서 0.03 초 밖에 걸리지 않습니다. 아마도 내부 Regexp :: Grammars 구조의 초기화가 느린데, 여기서는 느리지 만 바이트 코드로 컴파일하면이 경우에는 도움이되지 않습니다 (내부 상태의 일종의 직렬화 일 수도 있습니다). –

+1

나는 B :: Bytecode가 실제로 느린 것을 만들었다 고 느낀다. – ikegami

답변

1

영구 스크립트를 실행하는 방법이 있습니다. 일반적으로 웹 서버 컨텍스트에서 사용되지만 다른 용도로 사용하지 않아도됩니다.

이러한 시스템 중 하나는 CGI::SpeedyCGI이며, 내가 생각한 것일 수도 있고 아닐 수도 있습니다. 현재 PersistentPerl이라고도 알려져 있습니다.

관련 문제