2012-01-10 11 views
6

Attualmente sto usando xdebug profiler & KCacheGrind. Ma formato GallGrind non memorizza piena traccia delle chiamate, solo le tracce di chiamata genitore-figlio (guardano Kcachegrind/callgrind is inaccurate for dispatcher functions? per quello che sto parlando.)Un 'profiler con visualizzazione' per PHP con la visualizzazione `full backtrace`?

C'è un profiler con visualizzazione con visualizzazione completa backtrace disponibile per PHP?

Ho guardato

  • PHP Quick Profiler: Ma, richiede troppo codice da aggiungere e non la visualizzazione.
  • phpCallGraph: la versione più recente è stata modificata il 2009-08-06 (ref).
+0

Mi piacerebbe anche conoscere la risposta. Io uso gli stessi strumenti al momento e desiderano miglioramenti. –

+1

@ Mr-sk concordato. Dai un'occhiata a http://particletree.com/features/php-quick-profiler/. Ma nessuno strumento di visualizzazione. – ThinkingMonkey

+0

Interessante, bello, gli darò un'occhiata. –

risposta

3

Ho dovuto eseguire alcuni profiling PHP importanti per un progetto precedente alcuni mesi fa.

L'opzione migliore che ho trovato è stata la xhprof di Facebook con xhprof-ui.

Leggi su come installare entrambi qui:

http://blog.preinheimer.com/index.php?/archives/355-A-GUI-for-XHProf.html

Alcuni professionisti:

  • interfaccia facile da usare
  • database di back-end per salvare precedente sessione di profilatura
  • bello callgraphs
+0

+1 per raccomandazione xhprof, anche se è un po 'diverso da usare rispetto al profiler di xdebug –

+0

Ma non sembra che abbia uno strumento di visualizzazione per calltrace. +1 per suggerirlo però. – ThinkingMonkey

+0

_I stand corrected_. Xprof sembra fantastico. – ThinkingMonkey

1

Se si desidera visualizzare l'output del profiler, questa è una cosa. Se stai cercando di ottimizzare il tuo codice, non dimenticare di this method. So che puoi farlo in xdebug.

Si basa su un'idea molto semplice. Supponiamo che il tuo programma stia facendo più del necessario, quindi potrebbe essere velocizzato. Supponiamo, infatti, che per fare un ragionamento faccia 9 volte di più del necessario, quindi se si supponeva che occorresse 1 secondo, in realtà è 10 10. Quei 9 secondi di lavoro non necessario possono essere o meno mescolati in , come zucchero e farina.

OK, durante quei 10 secondi, basta premere^C per fermarlo, e quindi si guarda attentamente per vedere cosa stava facendo in quel momento.

Qual è la probabilità che tu l'abbia beccato a fare la cosa dispendiosa? In realtà, è molto improbabile che tu abbia acquistato il .

Se non sei sicuro, ripeti.

Lo spreco non deve essere così grande. In effetti, se continui a sospenderlo in questo modo, non appena lo vedi fare qualcosa su più di uno occasione, se è qualcosa che potresti liberarti, avrai una bella accelerazione, garantita.

Ad esempio, se lo si mette in pausa per 5 volte, e si vede che fa qualcosa che non ha davvero bisogno di fare in 2 di quelle occasioni, quanto potresti risparmiare? Non lo sai esattamente, ma sarà da qualche parte intorno al 40%. Potrebbe essere piccolo come il 20%. Potrebbe essere altrettanto grande quanto il 60%. Quindi non sai quanto salverà, ma non getti via una pepita d'oro solo perché non sei sicuro di quanto pesa.

Infine, non c'è alcun problema che il profiler possa scoprire che non lo farà. Il contrario non è vero.

+0

:) la faccina perché, questo è quello che ho fatto da quando ho iniziato a programmare. Questa è la mia prima volta con un profiler. – ThinkingMonkey

+0

@Think: Heh. Felice di sentirlo. Se hai più fortuna con un profiler, fammi sapere. –

+0

Niente aiuto speciale da profiler. Ma, (a volte sono molto assente e miope) Mi ha aiutato a notare alcune chiamate di funzione che non erano necessarie. E mi ero perso da rimuovere quando avevo fatto un'ottimizzazione (usare la cache). – ThinkingMonkey

Problemi correlati