Următorul script conține funcțiile recursive a(), b() și c(), având ca încărcătură în fiecare câte o funcție usleep, pentru urmărirea timpilor de execuție. Scriptul este inclus și în exemplele din download.
Execuția lui generează următorul arbore în Kcachegrind:
Putem face următoarele observații:
Toți timpii sunt exprimați în nanosecunde, pentru că KCachegrind nu acceptă valori numere reale, și există multe situații când un apel de funcție durează mai puțin de o microsecundă. Trebuie să prezentăm laude echipei XHProf pentru funcțiile excelente de temporizare.
Funcția date() folosită pentru generarea numelui trace-ului durează 5 milisecunde! Pentru cei care nu știau, date() este o funcție extrem de înceată.
Apelul recursiv b => b a fost decuplat în <CYCLE b> =[12x]> b, păstrând timpii petrecuți în fiecare apel (3ms) intacți
Ciclul a => c => a a fost decuplat (c => a mutată mai sus) în <CYCLE a> =[5x]> a =[4x]> c, păstrând timpii corecți, deci c este creditat corect cu 16ms
Deși secvența de apeluri c => a => c este deasemenea un ciclu, decuplarea apelurilor c (a => c) nu este necesară, întrucât arcul c => a a fost deja decuplat (vezi punctul anterior). Prin urmare, nu se generează un nod <CYCLE c>, păstrând lizibilitatea arborelui de execuție.
Împreună cu amprenta temporală foarte mică, procesarea corectă a apelurilor recursive este una din trăsăturile distinctive ale web3tracer.
Descărcați fișierul trace și examinați-l în KCachegrind. (Dacă browser-ul dvs deschide linkul ca text, copiați conținutul într-un fișier local).
(c) SC EXTEON SRL 2006-2009, Toate drepturile rezervate
Confidențialitatea dumneavoastră e importantă pentru noi! Site-ul nostru folosește cookie-uri, pentru care avem nevoie de acceptul dumneavoastră. Vă rugăm să citiți aici politica de procesare a datelor personale și a utilizării cookie-urilor.