Profilazione php. Profilazione e debug di applicazioni PHP con xhprof e FirePHP


A volte, ViewProfile.swf e altri errori di sistema SWF possono essere dovuti a problemi del registro di sistema di Windows. Diversi programmi possono utilizzare il file ViewProfile.swf, ma, quando tali programmi vengono disinstallati o modificati, possono rimanere voci del registro di sistema SWF "orfane" (errate).

Fondamentalmente, ciò significa che anche se il percorso effettivo del file potrebbe essere cambiato, la sua posizione precedente errata è ancora registrata nel registro di Windows. Quando Windows prova a cercare questi riferimenti a file errati (le posizioni dei file sul tuo PC), si possono verificare errori ViewProfile.swf. Inoltre, un'infezione da malware potrebbe aver danneggiato le voci di registro associate a Bioshock 2. Pertanto, queste voci di registro SWF danneggiate devono essere corrette per risolvere il problema alla radice.

La modifica manuale del registro di Windows per rimuovere le chiavi ViewProfile.swf non valide non è consigliata a meno che tu non sia un professionista dell'assistenza PC. Gli errori commessi durante la modifica del registro possono rendere il PC inutilizzabile e causare danni irreparabili al sistema operativo. Infatti, anche una virgola inserita nel posto sbagliato può impedire l'avvio del computer!

A causa di questo rischio, per controllare e riparare qualsiasi problema del registro di sistema relativo a ViewProfile.swf, è fortemente consigliabile utilizzare uno strumento di pulizia del registro di sistema fidato, come WinThruster (sviluppato da Microsoft Gold Certified Partner). Utilizzando uno strumento di pulizia del registro, puoi automatizzare il processo di rilevamento di voci di registro danneggiate, riferimenti a file mancanti (come quello che causa l'errore ViewProfile.swf) e collegamenti interrotti all'interno del registro. Prima di ogni scansione, viene creata automaticamente una copia di backup, consentendoti di annullare eventuali modifiche con un clic e proteggendoti da possibili danni al tuo computer. La parte migliore è che l'eliminazione degli errori di registro può migliorare notevolmente la velocità e le prestazioni del sistema.


Avvertimento: A meno che tu non sia un utente PC esperto, NON consigliamo di modificare manualmente il registro di Windows. L'utilizzo errato dell'editor del Registro di sistema può causare seri problemi che potrebbero richiedere la reinstallazione di Windows. Non garantiamo che i problemi derivanti dall'uso errato dell'editor del Registro di sistema possano essere corretti. L'utilizzo dell'editor del Registro di sistema è a tuo rischio e pericolo.

Prima di riparare manualmente il registro di Windows, è necessario creare un backup esportando una porzione del registro associata a ViewProfile.swf (es. Bioshock 2):

  1. Fare clic sul pulsante Inizio.
  2. Accedere " comando"V barra di ricerca... NON FARE ANCORA CLIC ACCEDERE!
  3. Tenendo premuti i tasti CTRL-Maiusc sulla tastiera, premi ACCEDERE.
  4. Verrà visualizzata una finestra di dialogo per l'accesso.
  5. Clic .
  6. La scatola nera si apre con un cursore lampeggiante.
  7. Accedere " regedit" e premere ACCEDERE.
  8. Nell'Editor del Registro di sistema, seleziona la chiave relativa a ViewProfile.swf (ad esempio Bioshock 2) di cui vuoi eseguire un backup.
  9. Sul menu File Selezionare Esportare.
  10. Sulla lista Salvare Seleziona la cartella in cui desideri salvare la chiave di backup di Bioshock 2.
  11. Nel campo Nome del file Inserisci un nome per il file di backup, ad esempio "Backup Bioshock 2".
  12. Assicurati il ​​campo Intervallo di esportazione valore selezionato Ramo selezionato.
  13. Clic Salva.
  14. Il file verrà salvato con estensione .reg.
  15. Hai ora un backup della voce del registro di sistema relativa a ViewProfile.swf.

I seguenti passaggi per modificare manualmente il registro non verranno descritti in questo articolo, poiché potrebbero danneggiare il sistema. Se desideri maggiori informazioni sulla modifica manuale del registro, consulta i collegamenti seguenti.

La profilazione dell'applicazione è la raccolta di dati sulla velocità di esecuzione di varie sezioni del programma (file e funzioni). Sono disponibili molti strumenti di profilazione PHP, ma non tutti gli strumenti sono adatti per eseguire analisi direttamente su un sito di produzione.

XHProf e il suo fork Tideways è un profiler comodo e semplice che può raccogliere in modo efficace statistiche sul funzionamento di un'applicazione quasi senza alcuna riduzione della velocità della tua applicazione (o del tuo sito web).

Perché il codice del profilo?

Se l'applicazione inizia a funzionare lentamente (leggi “il sito ha iniziato a rallentare”), la profilazione permetterà di scoprire quale parte è più lenta. Il risultato della profilazione è solitamente un elenco di funzioni eseguite insieme al relativo tempo di esecuzione.

La profilazione del codice dovrebbe avere la priorità nel processo di ottimizzazione dell'applicazione. Qualsiasi altra cosa sarebbe una supposizione e molto probabilmente sbagliata. Devi sapere cosa causa esattamente problemi e "freni".

La profilazione è una procedura per raccogliere e organizzare statistiche sul tempo di esecuzione del codice. Questo non è un processo di ottimizzazione o modifica del programma. Il risultato di questo processo è solitamente un rapporto esteso sui componenti del programma e sulle statistiche sulle prestazioni delle funzioni.

Questo è esattamente lo scopo per cui è stata sviluppata la soluzione XHProf. È progettato per funzionare su siti Web reali. L'idea principale di questo profiler è creare un carico minimo sull'applicazione, raccogliendo allo stesso tempo tutti i dati necessari sulla velocità di funzionamento. La soluzione è stata sviluppata dagli specialisti di Facebook.

Come connettere automaticamente il profiler php?

I nostri specialisti hanno lavorato duramente e hanno reso questo processo completamente automatizzato.
Devi solo effettuare il login, selezionare il dominio desiderato nella scheda “Domini”, cliccare sull'icona “PHP.INI + PHP Profiler” e abilitare la casella di controllo “Domain Profiler”.

L'attivazione di questa funzione potrebbe richiedere del tempo, in genere non più di 10 minuti.

Per le versioni php 5.2, 5.3, 5.4, 5.5, 5.6, 7.0 utilizziamo il profiler XHProf, per le versioni php 7.1 e successive utilizziamo il profiler Tideways.

Una volta abilitato, su ogni pagina del tuo sito elaborata da PHP, nella parte inferiore verrà integrato un blocco speciale con collegamenti al file di report (il collegamento sarà simile a questo:

Nome-dominio.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX&source=someapp)

Ed ecco come apparirà il file del rapporto:

La tabella contiene un elenco delle funzioni eseguite in una pagina con informazioni aggiuntive:

  • Chiamate: numero e percentuale di chiamate a funzioni
  • incl. Wall Time - tempo di esecuzione di una funzione con funzioni annidate
  • escl. Wall Time: tempo di esecuzione della funzione senza funzioni annidate
  • incl. CPU: tempo del processore con funzioni annidate
  • escl. CPU: tempo del processore senza funzioni nidificate
  • incl. MemUse: consumo di memoria con funzioni nidificate
  • escl. MemUse: consumo di memoria senza funzioni annidate
  • incl. PeakMemUse: consumo massimo di memoria con funzioni annidate
  • escl. PeakMemUse: consumo massimo di memoria senza funzioni annidate

Va notato che il rapporto costruito utilizzando le maree potrebbe essere visivamente leggermente diverso da questo rapporto, ma l'essenza non cambia.

Rapporti grafici


Le sezioni del codice ad alta intensità di risorse sono evidenziate in giallo (medio) e rosso (più pesante). Queste sono quelle sezioni di codice che utilizzano molte risorse rispetto al resto del programma. Potrebbe trattarsi di una funzione lenta o di molte chiamate a una funzione veloce. Nel nostro esempio, vediamo che la funzione mysqli_multi_query() è contrassegnata in rosso perché è la più lenta.

Rapporti aggregati

L'interfaccia XHProf consente inoltre di visualizzare informazioni aggregate da più report contemporaneamente. Per fare ciò, run_id viene passato separato da virgole:

Nome-dominio.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX,YYYYYYYYYYY&source=someapp

Caratteristiche tecniche

    L'inclusione automatica del profiler viene implementata utilizzando le direttive auto_append_file e auto_prepend_file, che collegano due file php eseguibili:

    — auto_append_file inizializza l'oggetto di raccolta delle statistiche e inizia il suo lavoro;

    — auto_prepend_file completa la raccolta delle statistiche e genera un file di report con le statistiche (in formato JSON);

    Se exit() o die() viene chiamato mentre lo script è in esecuzione, auto_prepend_file non verrà eseguito. il file delle statistiche non verrà generato e un blocco con collegamenti al file di report non verrà incluso in fondo alla pagina.

  1. Pertanto, l'accesso a qualsiasi pagina elaborata da php attiverà la creazione di un nuovo file di report, quindi consigliamo di disabilitare il profiler dopo aver raccolto le statistiche (di solito alcune ore), per evitare di superare la quota del disco, che potrebbe essere esaurita dopo aver generato un gran numero di segnalazioni!
  2. Importante: il profiler funzionerà solo se il sito è collegato al server tramite un percorso standard, in modo automatico (cioè utilizzando il pannello di controllo dell'hosting), altrimenti è necessario contattare il supporto tecnico di Hostland per configurare il profiler.
  3. In modalità automatica, il profiler si connette solo al nome di dominio principale; il profiler non è automaticamente connesso ai sottodomini.
  4. In modalità automatica, il profiler raccoglie statistiche solo per gli script con estensione .php e .php5
  5. Non è possibile garantire il funzionamento ininterrotto del sito dopo aver collegato il profiler PHP, pertanto, se il sito non funziona correttamente mentre il profiler è abilitato, è necessario disabilitarlo e continuare la profilazione con altri mezzi.

Riassumiamo

Ci auguriamo che questo strumento ti aiuti a rendere i tuoi siti ancora più veloci sull'hosting Hostland.

L'articolo utilizzava parzialmente materiali dell'utente Den Golotyuk pubblicati sul sito web

Balakat Obsesslav. Suf. derivato da balaka“chiacchierone(i)”, formato a sua volta con l'aiuto del suf. -ak(a) da “conversazione, chiacchiere” (dalla stessa radice, ma con suf. -l-, COME , cm.). Parole , palle(plurale) “conversazione, chiacchiere” nei dialetti e negli altri slavi. lingua sono conosciuti ancora oggi. Cm. .

Dizionario etimologico scolastico della lingua russa. Origine delle parole. - M.: Otarda. N. M. Shansky, T. A. Bobrova. 2004 .

Scopri cos'è "balakat" in altri dizionari:

    balbettio- parla, chiacchiera, scarabocchia (Dal) Vedi... Dizionario dei sinonimi

    GAMBO- BALKAK, io balbetto, tu balbetti, immaturo. (regione). Chatta, parla. Il dizionario esplicativo di Ushakov. D.N. Ushakov. 1935 1940... Dizionario esplicativo di Ushakov

    GAMBO- Sud balbettio Perm. parlare, chiacchierare, parlare, scarabocchiare. Balakanya mercoledì. chiacchiere. Balakusha, balaka ob., meridionale, balyaka perm., balakar, chiacchierone, chiacchierone. Balakar, sii un giullare, scherza come i giullari ufficiali. Balakir maschio, inferiore, kazako,... ... Dizionario esplicativo di Dahl

    balbettio- chiacchierare, dire sciocchezze, ucraino. Balakati, blr. Balakat, polacco baɫakac. Balbettare o balbettare; vedere Bernecker 1, 40; Mi. EW 5. Un altro livello di alternanza vocale: ucraino. prova a borbottare, polacco. beɫknąc – lo stesso, ceco. blknouti; Mercoledì Shakhmatov,... ... Dizionario etimologico della lingua russa di Max Vasmer

    Balakat-Nesov. trans. e ininterrotto. decomposizione Parla, chiacchiera. Il dizionario esplicativo di Efraim. T. F. Efremova. 2000... Dizionario esplicativo moderno della lingua russa di Efremova

    balbettio- balakat, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balakal, balakala, balakalo, balakali, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka,... .. Forme delle parole

Ha mostrato come installare e configurare xdebug e ha trattato alcune funzionalità di base, come il miglioramento dell'output della funzione var_dump() o la stampa di una traccia dello stack di chiamate quando si riceve un messaggio di errore. Nella seconda parte abbiamo esaminato questa funzionalità di xdebug come tracciamento. La traccia contiene tutte le chiamate a funzioni e metodi nel programma, tempo di avvio, facoltativamente dimensione della memoria, parametri passati e restituiti. Un registro di traccia può aiutarti a comprendere il percorso di esecuzione di un programma complesso. Invece di inserire codice di debug all'interno del programma, attivi o disattivi la traccia dove necessario, quindi utilizzi utilità come grep o le tue applicazioni PHP per analizzare il file di registro.

In questo articolo esamineremo la profilazione. A prima vista, la profilazione è simile al tracciamento. Il log di profilazione non è destinato all'uomo, non è destinato a visualizzare il flusso di un programma, ma ci fornisce dati per l'analisi statistica di un programma in esecuzione.

Creazione di un log di profilazione

Di seguito è riportato un breve estratto dal registro di profilazione generato da xdebug:

fl=php:interno
fn=php::definisci
106 3

Fl=C:\www\drupal\includes\bootstrap.inc
fn=require_once::C:\www\drupal\includes\bootstrap.inc
1 648
cfn=php::define
chiamate=1 0 0
13 6
cfn=php::define
chiamate=1 0 0
18 4
cfn=php::define
chiamate=1 0 0
23 2


Come puoi vedere, il registro di profilazione non può essere letto direttamente. Utilizzeremo strumenti aggiuntivi per visualizzare e analizzare i dati ottenuti. Pertanto, la profilazione mostra quante volte è stata lanciata una particolare linea e quanto tempo ha richiesto il lancio.
La creazione di un log di profilazione degrada notevolmente le prestazioni, in modo simile alla creazione di un log di traccia, perché è necessario descrivere il passaggio di ogni riga. Pertanto, proprio come nel caso del tracciamento, non eseguire la profilazione server di produzione... Tuttavia, ci sono casi in cui la profilazione deve essere eseguita su un sistema live. In questo caso, fai attenzione a eseguire xdebug contemporaneamente ad altre estensioni Zend, come caricatori, ottimizzatori o cache.
Affinché xdebug possa iniziare a registrare i log di profilazione, aggiungi

Tieni presente che non è possibile eseguire la profilazione all'avvio eseguendo un comando.
Poiché il registro di profilazione è destinato ad essere letto dai programmi di analisi, non esistono impostazioni aggiuntive che consentano di visualizzare informazioni aggiuntive, come nel caso del registro di traccia. Esistono tuttavia alcune impostazioni che consentono di configurare la profilazione, simili a quelle che abbiamo utilizzato durante l'impostazione del tracciamento.
Innanzitutto, xdebug scrive il log di profilazione nella directory /tmp per impostazione predefinita. Se utilizzi Windows, devi correggere php.ini, in questo modo:
xdebug.profiler_output_dir="c:\tracce"

Per impostazione predefinita, xdebug sovrascrive il registro di profilazione esistente. Puoi configurarlo per integrare quello esistente aggiungendo il seguente comando

nel file php.ini. Ci sono casi in cui non si vuole creare un log di profilazione per tutti i file, ma allo stesso tempo attivare la profilazione in fase di runtime risulta problematico. Invece di attivare e disattivare periodicamente la profilazione, aggiungi il comando
xdebug.profiler_enable_trigger=Attivo

nel file php.ini. Ora puoi attivare e disattivare la profilazione passando uno speciale parametro GET o POST XDEBUG_PROFILE a uno script PHP. Ciò consentirà la profilazione solo per questo script PHP. Non è necessario impostare il valore di questo parametro, basta ricordarsi di aggiungere questo parametro all'indirizzo test.php?XDEBUG_PROFILE.

Nome del registro di profilazione

Il nome che xdebug assegna al registro di profilazione per impostazione predefinita è "cachegrind.out". più identificatore di processo. Esattamente come nel caso del log di traccia, è possibile modificare i nomi del log aggiungendo le impostazioni appropriate a php.ini. Nome del parametro xdebug.profiler_output_name. L'argomento è una stringa. che può contenere vari modificatori. Quelli più importanti sono di seguito:

  • %p – identificatore del processo
  • %r – numero casuale
  • %u - tempo
  • %H – valore di $_SERVER["HTTP_HOST"]
  • %R – valore di $_SERVER["REQUEST_URI"]
  • %s – nome comprensivo del percorso completo, le barre vengono convertite in caratteri di sottolineatura
Tieni presente che il modificatore %s viene utilizzato solo per xdebug.profiler_output_name. Se vuoi conoscere il nome del log di profilazione, puoi chiamare la funzione xdebug_get_profiler_filename().

Analisi dei log di profilazione
Come accennato in precedenza, per analizzare i log di profilazione sono necessari ulteriori programmi per la visualizzazione dei dati. Tutti i log di profilazione creati da xdebug sono in un formato simile al formato Cachegrind. Cachegrind è un profiler che fa parte di un programma più potente chiamato Valgrind, un programma di debug e profilazione software per Linux. Cachegrind è stato progettato per analizzare le statistiche di cache, utilizzo della memoria e comandi del programma. Un altro strumento Valgrind, Callgrind, disegna grafici delle chiamate. Per quanto riguarda PHP, possiamo utilizzare questa applicazione per visualizzare e analizzare il registro di profilazione.
Lo strumento comunemente utilizzato per analizzare il log di profilazione generato da xdebug si chiama . KCachegrind è un software gratuito concesso in licenza sotto GPL (funziona solo su sistemi Unix). Esiste però un semplice programma per Windows, anch'esso gratuito. Diamo prima un'occhiata alla versione di Windows.

WinCacheGrind: analisi dei log di profilazione in Windows

La versione corrente (al momento in cui scrivo l'autore di questo articolo) di WinCachegrind è 1.0.0.12. Questa versione risale al 2005, il che significa che WinCachegrind non è stato sviluppato da molto tempo. Se si guardano le note di rilascio, gli autori scrivono che il programma presenta dei bug che a volte lo fanno comportare in modo strano.
Pertanto consiglio di utilizzare KCachegrind, lanciato sulla base di una macchina virtuale sull'ultima distribuzione Linux, ad esempio Ubuntu (ndr, in generale, una strana raccomandazione; in questo caso consiglierei semplicemente di installare Linux, e non recintare il giardino delle macchine virtuali). Sotto Windows è disponibile un numero enorme di macchine virtuali. Se per qualche motivo non è possibile utilizzare Unix o una macchina virtuale, è possibile continuare a utilizzare WinCachegrind per una semplice analisi dei log di profilazione. WinCachegrind non disegna grafici delle chiamate, a differenza di KCachegrind.
Installare Wincachegrind è estremamente semplice. Eseguire il programma di installazione, fare clic sul pulsante per accettare la licenza e l'installazione è completa. Ora puoi eseguire il programma e aprire uno dei log di profilazione cachegrind creati da xdebug.

Facendo clic sull'orologio o sull'icona sigma è possibile alternare la visualizzazione delle informazioni in valori assoluti e percentuali. La visualizzazione percentuale mostra quanto tempo, come percentuale del tempo totale, è necessario per richiamare una funzione in un determinato blocco.
Due impostazioni utili sono Profiler -> Nascondi funzioni veloci e Profiler -> Nascondi funzioni di libreria. Il primo interruttore nasconde funzioni il cui contributo temporale al tempo complessivo di esecuzione del programma è insignificante.
La seconda impostazione, Profiler -> Nascondi funzioni di libreria, nasconde le funzioni integrate in PHP dall'analisi generale. Quando entrambe queste impostazioni sono abilitate, vedi meno dati, permettendoti di concentrarti sulle aree del tuo codice che necessitano di ottimizzazione.
La finestra principale contiene due schede: Riga per riga e Complessivo. Entrambe le schede mostrano le stesse informazioni, ma la scheda Generale aggrega le informazioni per una migliore presentazione. Il tempo autonomo visualizza il tempo di esecuzione del codice nel blocco corrente, mentre il tempo cumulativo (Cum.) mostra il tempo di esecuzione totale delle funzioni nel blocco specificato.

KCacheGrind: analisi dei log di profilazione in Unix

La versione Unix di KCachegrind fornisce più funzionalità di WinCachegrind. KCachegrind visualizza i dati e costruisce un grafico delle chiamate.
Per iniziare a usarlo, devi installare KCachegrind. Versione attuale . È disponibile una versione più recente (0.10.1), ma fa parte del pacchetto Valgrind.
Se possibile, usa un gestore di pacchetti per installare il pacchetto KCachegrind. KCachegrind usa GraphViz per disegnare i grafici delle chiamate, quindi devi installare anche il pacchetto GraphViz se il tuo gestore pacchetti non installa automaticamente i pacchetti dipendenti.
Se non trovi il pacchetto binario di KCachegrind, dovrai compilare KCachegrind da solo. Dopo aver scaricato i sorgenti, esegui

./configure --prefix=/opt/kde3
Fare
effettuare l'installazione

Come puoi notare, devi specificare il percorso dell'installazione corrente della libreria KDE. Se non sai dove si trovano le librerie KDE sul tuo sistema, usa

per visualizzare il percorso delle librerie KDE.
Una volta installato, puoi eseguire KCacheGrind dalla riga di comando

La visualizzazione tabellare dei dati in KCachegrind è molto simile a WinCachegrind. Puoi anche alternare tra valori assoluti e percentuali. Alcune funzionalità di KCachegrind non sono progettate per PHP. L'immagine seguente mostra il grafico delle chiamate del programma phpMyAdmin:


Come puoi vedere, la maggior parte del tempo di avvio è stato trascorso all'interno di common.inc.php. Lo screenshot seguente mostra una visualizzazione delle chiamate di funzione all'interno di common.inc.php:

Questo blocco di codice esegue due require_onces, ovvero la metà del tempo necessario per eseguire common.inc.php. Facendo doppio clic su qualsiasi rettangolo ti porterà più in profondità nell'analisi dei dati.

Ottimizzazione del codice basata su dati di profilazione

Profila sempre le tue applicazioni prima di ottimizzarle. Puoi iniziare tu stesso l'ottimizzazione, nel luogo in cui ti sembra che questa ottimizzazione porterà un effetto, ma questo non è sempre vero. L'ottimizzazione ha effetto principalmente solo in quelle parti che richiedono più tempo nel processo di esecuzione.
Se stai eseguendo molte copie di un programma contemporaneamente, potresti comunque dover ottimizzare la parte del programma che occupa la maggior parte del tempo di esecuzione. In questo caso, l'ottimizzazione non renderà più veloce il servizio di una singola richiesta, ma consentirà al tuo server di gestire carichi elevati consumando meno risorse per soddisfare tali richieste.
Quando si esaminano le durate di esecuzione del profiler, tenere presente che i valori assoluti sono meno importanti dei valori relativi. Misurati su sistemi diversi, i valori assoluti possono variare. Tuttavia, prima di iniziare a ottimizzare il codice, considera quanto segue.
Una regola importante nell'ottimizzazione è ridurre il numero di operazioni di I/O. Alcune operazioni di I/O richiedono molto tempo rispetto ai calcoli. Ridurre tali operazioni può essere un modo molto efficace per velocizzare il tuo programma. La rimozione di una chiamata I/O può fornire un miglioramento più efficace rispetto a dedicare molte ore all'ottimizzazione del codice. Pertanto, dovresti concentrarti sulle operazioni di I/O prima di iniziare a scrivere codice.
Puoi anche aumentare il numero dei tuoi server prima dell'ottimizzazione. Puoi acquistarne uno enorme, che ti darà un piccolo aumento della produttività. Il tempo di sviluppo è più costoso del prezzo di un nuovo server. E se aumenti la quantità di hardware, puoi essere sicuro che otterrai l’aumento immediatamente senza alcun impatto sul codice PHP. Quando uno sviluppatore trascorre uno o due giorni a ottimizzare il codice, non si può mai sapere quanto aumenterà la produttività. E alla fine non puoi più essere sicuro che l'ottimizzazione non porterà errori.
Convertire alcune pagine in pagine statiche è un modo per ottenere prestazioni migliori. Diciamo che c'è un sito con molto traffico, dove uno script PHP crea la prima pagina per ogni richiesta, selezionando le informazioni da un database o da un file XML. Se i dati su una pagina cambiano abbastanza frequentemente, puoi ricrearne una copia statica. Se la conversione in una visualizzazione statica non è possibile per una pagina (alcune informazioni personali vengono visualizzate nella pagina), puoi convertire alcuni blocchi in visualizzazione statica.
Un altro livello di ottimizzazione non richiede la modifica del codice PHP. Come sappiamo PHP è un linguaggio interpretato. Ciò significa che i suoi comandi vengono tradotti in fase di esecuzione in codice intermedio. La trasmissione viene ripetuta ogni volta che viene eseguito lo script. Ciò rende PHP più lento rispetto a linguaggi come C o Java, che non richiedono l'analisi del codice ogni volta che lo si esegue. Per PHP, puoi utilizzare le cache di rappresentazione intermedie (vedi la mia traduzione....) per salvare e riutilizzare il codice intermedio, questo rende l'avvio e l'esecuzione più veloci.
Tutto ciò non significa che questo non sia il momento o il luogo per ottimizzare il codice PHP. Alcune ottimizzazioni del codice possono migliorare notevolmente le prestazioni. Tuttavia, ricorda sempre che la modifica del codice comporta sempre il rischio di introdurre ulteriori bug e problemi di sicurezza. Ricorda inoltre che l'ottimizzazione del codice lo rende meno leggibile.

Conclusione

Creare e visualizzare un log di profilazione è una delle condizioni importanti per l'ottimizzazione del codice PHP. Devi sapere quali punti del programma richiedono più tempo ed è da lì che dovresti iniziare a ottimizzare.
Nel prossimo articolo esamineremo il debug utilizzando xdebug. xdebug può fornirti la possibilità di eseguire il debug remoto. Utilizzando un client dotato di questa funzionalità, come Eclipse PDT, puoi eseguire il debug del codice senza modificarlo, impostare punti di interruzione, saltare attraverso sezioni di codice e vedere come e dove le variabili modificano i valori.

Ultimo aggiornamento: 01/12/2019

Pubblicazione: 01/09/2016


Usando PhpStorm puoi analizzare le prestazioni del tuo codice PHP profilandolo. La profilazione consentirà di raccogliere statistiche sull'esecuzione del programma: i nomi delle funzioni eseguite, quante volte è stata eseguita ciascuna funzione, il tempo di esecuzione di ciascuna funzione, quali altre funzioni sono state chiamate all'interno di ciascuna funzione e così via.

Queste informazioni possono darti suggerimenti su dove è possibile migliorare il tuo codice.

Vediamo come funziona.

1. Prerequisiti

PhpStorm IDE può utilizzare le informazioni di profilazione raccolte utilizzando lo strumento Xdebug. Questa estensione deve essere installata e configurata sul tuo sistema. Per ulteriori informazioni consultare la Guida all'installazione di Xdebug.

Se sei un utente della meravigliosa piattaforma server portatile e dell'ambiente software Open Server, non devi fare nulla: l'estensione Xdebug è già installata e connessa.

Attenzione

Xdebug non è compatibile con IonCube. IonCube è uno strumento (utilità) per la protezione del software scritto nel linguaggio di programmazione PHP. Disabilita completamente l'estensione IonCube o mentre usi Xdebug. Un altro possibile problema potrebbe essere che Xdebug sia configurato di default sulla porta 9000, che è la stessa porta utilizzata da Open Server. Per risolvere questo problema, in uno dei casi dovresti cambiare il numero di porta.

Tutte le azioni qui descritte sono state riprodotte con i risultati attesi corretti nel seguente ambiente tecnologico:

2. Abilitazione del profiler Xdebug

La profilazione aggiunge un sovraccarico all'esecuzione dell'applicazione e genera un'enorme quantità di informazioni sul disco. Pertanto, è meglio abilitare il profiler Xdebug solo quando necessario e disabilitarlo in circostanze normali.

Xdebug è configurato tramite direttive nel file php.ini attivo. Ogni volta che abiliti il ​​profiler, devi configurare la seguente direttiva:

xdebug.profiler_output_dir = /percorso/del/negozio/istantanee

Il valore della direttiva deve specificare il percorso che verrà utilizzato per salvare i file di profilazione.

2.1. A livello globale

Per abilitare il profiler Xdebug a livello globale, è necessario utilizzare la seguente direttiva:

xdebug.profiler_enable = 1

In questo modo, la profilazione verrà eseguita ogni volta che viene eseguito uno script. È conveniente utilizzare questa opzione per abilitare il profiler solo in rari casi.

2.2. Utilizzo di opzioni interprete aggiuntive

È possibile abilitare il profiler utilizzando parametri aggiuntivi dell'interprete nella finestra Configurazioni Esegui/Debug. Per aprirlo, utilizzare i seguenti elementi nel menu principale dell'IDE:

La sezione Opzione (contrassegnata con un contorno rosso nello screenshot sopra) Opzioni interprete (opzioni interprete) della riga di comando (riga di comando) dovrebbe contenere la seguente riga:

D xdebug.profiler_enable = 1

Questa opzione ti consentirà di utilizzare il profiler per una configurazione specifica e non su scala globale.

2.3. Utilizzando parametri GET/POST speciali o un file cookie

Per una profilazione più controllata, dovrebbe essere utilizzata la seguente direttiva:

xdebug.profiler_enable_trigger = 1

Se il valore della direttiva è impostato su 1, quando si esegue uno script con un parametro GET/POST o un cookie denominato XDEBUG_PROFILE, la profilazione verrà eseguita indipendentemente dall'impostazione xdebug.profiler_enable.

Questa opzione per abilitare il profiler è la più popolare.

3. Raccolta dei log di profilazione

Per poter analizzare i log di profilazione è necessario prima raccoglierli.

3.1. Raccolta di log di profilazione per applicazioni web

Per profilare le applicazioni web, utilizza il profiler Xdebug a livello globale o avvialo e arrestalo su richiesta. Dopo aver attivato il profiler, apri l'applicazione nel browser per iniziare a raccogliere dati: log di profilazione.

Quando si analizzano i problemi di prestazioni, l'utilizzo di bookmarklet o estensioni del browser per il debug è un ottimo approccio in quanto consente di navigare nell'applicazione e avviare il profiler solo quando viene rilevato un problema di prestazioni. Ciò consente di raccogliere log di profilazione mirati.

3.2. Raccolta di log di profilazione per applicazioni CLI e unit test

Per profilare le applicazioni CLI e gli unit test, utilizzare il profiler Xdebug a livello globale o creare una configurazione di esecuzione separata per abilitare il profiler utilizzando la finestra Configurazioni Esegui/Debug. Quindi eseguire l'applicazione CLI o i test unitari per raccogliere i dati di profilazione.

Quando si analizzano i problemi di prestazioni negli unit test, un buon approccio consiste nel creare una configurazione separata per eseguire solo gli unit test che si sospetta presentino problemi di prestazioni. Ciò consente di raccogliere log di profilazione mirati.

4. Analisi della descrizione del log di profilazione

Diamo uno sguardo più da vicino al registro di profilazione.

4.1. Apertura del registro di profilazione

Per aprire il registro di profilazione, utilizzare i seguenti elementi nel menu principale dell'IDE: .

Se sei un utente della meravigliosa piattaforma server portatile Open Server, puoi anche utilizzare lo strumento multipiattaforma Webgrind per visualizzare il registro di profilazione. È possibile trovarlo tramite le seguenti voci del menu principale di Open Server [Avanzate → Profilo PHP].

I log di profilazione vengono salvati in una cartella in base alla direttiva xdebug.profiler_output_dir configurata. Il nome del file generato inizia sempre con cachegrind.out. e termina con l'ID del processo PHP o del server web o con l'hash crc32 della directory in cui si trova lo script profilato.


4.2. Scheda Statistiche di esecuzione

Nella scheda Statistiche di esecuzione è possibile esaminare le informazioni di riepilogo sui parametri di esecuzione di ciascuna funzione chiamata. Puoi vedere tutti i file, le chiamate alle funzioni, quante volte sono state chiamate e il tempo di esecuzione (assoluto e relativo) di ciascuna funzione.

La griglia superiore mostra varie metriche:

  • Own Time: la quantità di tempo che una funzione impiega eseguendo il proprio codice (senza prendere in considerazione le chiamate ad altre funzioni).

La griglia inferiore mostra due schede: Chiamati - le funzioni che lo script chiama qui e Chiamanti - da dove è stato chiamato lo script. Puoi vedere varie metriche qui:

  • Tempo: tempo di esecuzione totale.
  • Chiamate: numero di chiamate.

Le funzioni con un lungo tempo di esecuzione o un gran numero di chiamate necessitano sicuramente di essere testate.

4.3. Scheda Albero delle chiamate

La scheda Albero delle chiamate visualizza i percorsi di esecuzione del codice. Qui puoi vedere informazioni più dettagliate sul tempo di esecuzione di ciascuna funzione e così via.

La griglia superiore mostra gli alberi delle chiamate (quali funzioni vengono chiamate in altre funzioni) e altri parametri:

  • Callable (chiamato file): il file che è stato eseguito.
  • Tempo: tempo di esecuzione totale.
  • Chiamate: numero di chiamate.

La griglia inferiore mostra due schede: Chiamati - funzioni che vengono chiamate qui e Chiamanti - da cui viene chiamata la funzione. Puoi vedere varie metriche qui:

  • Callable (chiamata funzione): una funzione che è stata eseguita.
  • Tempo: tempo di esecuzione totale.
  • Chiamate: numero di chiamate.

Domande di controllo

  1. Perché le applicazioni PHP vengono profilate?
  2. Quanti modi principali esistono per abilitare il profiler Xdebug?
  3. Qual è il modo migliore di procedere durante la profilazione delle applicazioni CLI e degli unit test?
  4. Quali strumenti possono essere utilizzati per analizzare i log di profilazione?
  5. Quando analizzi un log di profilazione, a quali metriche dovresti prestare attenzione per prime?

Pubblicazioni sull'argomento