netpromotion/profiler – rychlý, malý a snadno použitelný profilovací nástroj s napojením do Tracy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
petrknap
Člen | 6
+
+10
-

Potřebujete zjistit, proč je Vaše aplikace pomalá a kde se Vám ztrácí paměť? Chcete jednoduché řešení, které dělá přesně to co chcete a nevyužívá výkon na zbytečnosti? Pak jste na tom stejně jako my v Netpromotion a mohlo by Vás zajímat naše rozšíření netpromotion/profiler.

Výhody

  • profily můžou zůstat v kódu i na produkci, prakticky nulové dopady na výkon ve stavu disabled
  • minimální množství závislostí
  • jednoduché napojení do Nette
  • podporuje vnořené profilování, velký profil lze rozpadnout na menší vnořené části
  • lze použít i na profilování samotného spouštění Nette aplikace

Nevýhody

  • neumožňuje komplexní konfiguraci
  • neumí to uvařit kafe (ani čaj)

Instalace

Nejprve spusťte ve složce projektu příkaz composer require netpromotion/profiler a následně přidejte extension do konfigurace:

extensions:
    profiler: Netpromotion\Profiler\Extension\ProfilerNetteExtension

Použití

Podezřelý kód uvězněte mezi volání funkce Profiler::start a Profiler::finish, třeba takto:

class CriticalService
{
	private function slowMethod($input)
	{
		Profiler::start();
		doSomethingSlow($input);
		Profiler::finish();
	}

	public function criticalMethod($input)
	{
		Profiler::start();
		$this->slowMethod($input);
		doSomethingCritical($input);
		Profiler::finish();
	}
}

Profiler::start();
$service = new CriticalService();
foreach ($array as $key => $value) {
	Profiler::start("Begin of foreach iteration [%s]", $key);
	$service->criticalMethod($value);
	doSomethingElse();
	Profiler::finish("End of foreach iteration [%s]", $key);
}
doSomethingElse();
Profiler::finish();

Následně už jenom sledujte Tracy bar, pokud bude vše v pořádku, uvidíte v Tracy nový panel s ikonkou stopek, po najetí/kliknutí myší se Vám zobrazí podrobný seznam profilů, zobrazující všechny důležité údaje.

Toto byla jen taková drobná ochutnávka, pro více informací doporučuji přečíst naše README.md.

Kam směřujeme?

Našim cílem je vytvořit a udržovat snadno čitelný zdarma dostupný profiler, který budeme v Netpromotion používat na všech našich projektech zejména k udržování a zlepšování efektivnosti našeho kódu. Pokud při zkoušení a následném používání dostanete nápad na novou funkcionalitu, neváhejte se o něj podělit – je dost pravděpodobné, že jej zapracujeme.

P.S.: Pokud se Vám zdá, že jsme připraveni to rozšířit o podporu pro další frameworky, tak to je pravda.

Editoval petrknap (23. 9. 2016 13:48)

Karlito
Člen | 18
+
0
-

Je možné v konfiguraci nějak nastavit aby nám to změřilo od začátku do konce celou aplikaci aby jsme věděli které části nám trvají dlouho? abych nemusel všude dávat start a finish, ale aby to bylo i tak kompletní.
Zkoušel jsem to a dal jsem si finish v index.php na konec a chtěl bych se zeptat, pokud to chci už spustit před autoloadingem z vendoru, tak jak se k tomu dostanu, pokud mi to composer hodil do vendoru.
Děkuji
Také jsem zkoušel v configu nastavit v profile createservice na true ale hodilo mi to chybu ohledně latte metody create.

David Matějka
Moderator | 6445
+
+4
-

@Karlito na pokrocilejsi profilovani pouzij xdebug nebo blackfire