Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Profile compilation

by meetraz (Hermit)
on Aug 29, 2017 at 15:20 UTC ( [id://1198271]=perlquestion: print w/replies, xml ) Need Help??

meetraz has asked for the wisdom of the Perl Monks concerning the following question:

Hello, I have a large app which uses thousands of modules. It takes a long time to compile (about 75 seconds) before it even starts runtime. How can I profile the compile time taken by each module, in an inclusive/exclusive manner? I'm hoping to identify the slowest modules and either optimize those or replace them with something more lightweight.

Replies are listed 'Best First'.
Re: Profile compilation
by choroba (Cardinal) on Aug 29, 2017 at 15:26 UTC
    It seems the profiler tracks compile time, too. Have you tried running your application with Devel::NYTProf ?
    perl -d:NYTProf app.pl nytprofhtml netscape nytprof/index.html
    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
Re: Profile compilation
by kcott (Archbishop) on Aug 30, 2017 at 03:50 UTC

    G'day meetraz,

    If you put this line

    INIT { exit }

    before any other INIT blocks, your "app" should terminate before any runtime processing occurs.

    I put together this quick and dirty test script (pm_1198271_prof_compile_only.pl):

    #!/usr/bin/env perl use strict; use warnings; use autodie ':all'; use Moose; BEGIN { print "BEGIN block\n"; } sub should_not_run { print "&should_not_run ran!\n"; } should_not_run(); print "This shouldn't print\n"; INIT { exit } INIT { print "This INIT shouldn't run.\n" }

    Running that by itself:

    $ pm_1198271_prof_compile_only.pl BEGIN block

    Then doing as ++choroba suggested:

    $ perl -d:NYTProf pm_1198271_prof_compile_only.pl BEGIN block $ nytprofhtml Reading nytprof.out Processing nytprof.out data Writing line reports to nytprof directory 100% ... Extracting subroutine call data ... Extracting subroutine links Generating subroutine stack flame graph ...

    View "nytprof/index.html" in the browser of your choice. The third table, "Source Code Files — ordered by exclusive time then name", should show what you're looking for, longest compile time first.

    By using 'INIT { exit }', the profile results won't contain any runtime data; and it's just one line to remove when you've finished.

    — Ken

Re: Profile compilation
by Anonymous Monk on Aug 29, 2017 at 17:28 UTC
    Can the app be re-tooled to require what it needs when (and if) it needs it?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1198271]
Approved by talexb
Front-paged by haukex
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (7)
As of 2024-03-28 16:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found