Domanda

Sto lavorando a un'app Web che utilizza Perl e devo cercare di velocizzare parti dell'app.

Ho pensato di iniziare a profilare le chiamate particolari per la parte che desidero indagare. Ho fatto qualche ricerca sul profiling del codice Perl, ma sfortunatamente la maggior parte di quello che trovo dice che dovrei eseguire il mio codice perl con -d: DProf myapp dalla riga di comando. Questo non funziona abbastanza per me poiché il mio codice è all'interno di un'app Web. Ho trovato un modo per far funzionare la profilazione con apache, ma sfortunatamente il "più usato" i moduli che sono tornati dal profiler erano tutti moduli CPAN - Class :: xyz, etc etc etc. Non terribilmente utile.

Qualcuno sa di un buon modo oltre a me iniettare " timer " codice nei metodi che desidero profilare per scegliere come target solo questi metodi? Ho pensato di scrivere uno script di prova e di creare un profilo che, ma a causa della natura del codice su cui sto lavorando, richiederebbe un po 'più di lavoro di quanto spero di dover fare.

È stato utile?

Soluzione

Hai provato Devel :: NYTProf (molto meglio di Devel :: DProf ), che può funzionare con Apache? Quale server web stai usando? È uno script CGI alla vaniglia, una cosa mod_perl o qualcos'altro?

Se stai eseguendo operazioni su database, il DBI :: Profile può confronta le tue query, che è lavoro svolto in un altro programma.

Il vero trucco, tuttavia, è organizzare il codice in modo da poter eseguire l'intero spettro di test e profiling senza dover mettere tutto insieme alla fine per scoprire che qualcosa è lento. Questo non ti aiuterà molto a breve termine per combattere gli incendi, ma impedisce alle cose di diventare incendi a lungo termine. Esistono anche vari modi per simulare l'ambiente del server web e così via, ma questa è una domanda diversa. :)

Altri suggerimenti

Se stai usando CGI.pm, puoi passare argomenti al tuo script perl dalla riga di comando e CGI.pm li interpreterà come se fossero passati come parametri su HTTP. Quindi, se stai eseguendo il debug, ad esempio

http://example.com/scripts/example.pl?action=browse& ; search = passacavo & amp; limitare = blah

quindi puoi semplicemente chiamare dalla riga di comando, ad esempio

perl -d: NYTProf documentroot /scripts/example.pl 'action = sfoglia & amp; cerca = gommino & amp; restringi = blah'

Puoi utilizzare il modulo principale Benchmark con il < strong>: hireswallclock se vuoi davvero cronometrare le cose internamente. Ma davvero, dovresti essere in grado di creare un profilo dalla riga di comando. Potrebbe essere necessario scrivere script di test per emulare determinate parti di una richiesta CGI, ma DProf può essere estremamente utile quando si cercano colli di bottiglia delle prestazioni.

In particolare, cerca dove il tuo codice chiama il codice del modulo CPAN. Puoi farlo in loop molto più del necessario, quindi mentre il tempo è trascorso nel modulo CPAN, il refactoring del tuo codice può risolvere il problema.

A questo punto mi rendo conto che è un po 'tardi, ma questo è uno dei motivi per cui è bene usare CGI :: Application o un'altra architettura in cui l'app Web è solo una breve parte del codice Web che utilizza un gruppo di moduli che hai scritto per implementare la funzionalità effettiva. L'uso di un tale design rende molto semplice profilare (o semplicemente testare) qualsiasi modulo dalla riga di comando, individualmente o collettivamente, senza doversi preoccupare dell'aspetto web.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top