Přejít k navigační liště

Zdroják » Zprávičky » PHP: Je rychlejší singleton nebo statická třída?

PHP: Je rychlejší singleton nebo statická třída?

Zprávičky ‐ ‐ PHP, Různé ‐

Singleton patří bez nadsázky k jednomu z nejpopulárnějších návrhových vzorů; je velmi snadno pochopitelný a implementovatelný i v jazycích, kde objektová podpora není nijak extra mocná, jako např. v PHP. Leckdy se jimi ale řeší i věci, kde by bylo vhodnější použít jinou jazykovou konstrukci, například statickou třídu. Doru Moisa se zaměřil na srovnání singletonu a statické třídy z hlediska rychlosti volání. Svá měření shrnul v článku Static Call versus Singleton Call in PHP.

Komentáře

Odebírat
Upozornit na
guest
3 Komentářů
Nejstarší
Nejnovější Nejvíce hlasů
v6ak

Myslím, že nejlepší je rozhodovat se podle toho, co se tam logicky nejlépe hodí a ne podle toho, co je v současné implementaci s konkrétní konfigurací momentálně trošku výkonnější. Pokud programátor řeší výkon mimo kompilátory apod., nemělo by to IMHO obvykle (bez zvláštních důvodů) příliš přesáhnout řešení asymptotické složitosti. Rozhodně bych neřešil takové… ptákoviny. Zítra někdo napíše nějakou optimalizaci na Singletony nebo někdo nasadí nějaký php optimizer, HPHP nebo podobně, najednou bude vše jinak a já budu vše přepisovat? Ne, nejsem cvičená opice.
Vizte také podobný postoj: http://blog.krecan.net/2010/02/02/slava-abstrakci/

v6ak

Samozřejmě, vše záleží na správné interpretaci. Konkrétně o HPHP nejde, jde mi spíš obecně o přístup „Zítra nasadíme toto a výkon může být jinde.“.

Určité odůvodnění mohou mít jak „statické třídy“*, Singleton, tak i Dependency Injection.

  • Statické metody mají podobný význam jako fuknce.
  • Singleton použiju typicky tehdy, když chci implementovat nějaké rozhraní a všechny instance by byly stejné, například http://gist.github.com/319827 . Nepovažuji to jako vhodné řešení například pro databázové připojení. Považuji jej obvykle za vhodnější řešení než statické metody. Například v Javě si také mysleli, že třídě Math budou nejlépe slušet statické metody. Pak se tu objevila třída StrictMath. Budu chtít udělat třídu, která umí pracovat jak s Math, tak StrictMath. Co s tím? Kdyby to byly Singletony se společným abstraktním předkem (nejlépe s package-private konstruktorem), problém by byl snadno vyřešen.
  • Dependency Injection je vhodná pro předávání instancí napříč objektovým modelem a kam až vím to nenahradí jakýkoli jiný návrhový vzor. Používat zde Singleton apod. je něco jako používat globální proměnnou.

*) Tento pojem trošku koliduje se stejným pojmem v Javě, ale, myslím, víme, o čem mluvíme.

Začal jako projekt studentů Matfyzu. Český BIRD dnes pomáhá řídit provoz na největších internetových uzlech

Internet drží pohromadě i díky místům, kde se propojují sítě poskytovatelů připojení, cloudů nebo videoslužeb. S předáváním informací o tom, kudy jsou jednotlivé sítě dostupné, jim ve Frankfurtu, Londýně i Amsterdamu pomáhá český BIRD. Začal jako studentský projekt, po první verzi z roku 2000 léta spíš dřímal a soustavný vývoj obnovil až CZ.NIC. Ve své úloze uspěl tak výrazně, že největší uzly nakonec začaly platit vývoj konkurenčního softwaru, aby nebyly závislé jen na něm.

WebSocket: Jak dostat webovou aplikaci do reálného času

Chat, živé notifikace, společná úprava dokumentu nebo průběžně aktualizované kurzy. Uživatelé dnes čekají, že se webová aplikace změní ve chvíli, kdy se změní data, a ne až po stisknutí klávesy F5. Protokol WebSocket je nejrozšířenější způsob, jak mezi prohlížečem a serverem vytvořit trvalý obousměrný kanál. V článku se podíváme, jak funguje pod kapotou, jak ho použít v prohlížeči i na serveru a na co si dát pozor při nasazení do produkce.

Zahoďte knihovny: dropdowny, tooltipy a přechody stránek jen s HTML a CSS

Rozbalovací menu, tooltip, modální okno a plynulý přechod mezi stránkami. Ještě nedávno čtyři důvody, proč do projektu přidat několik knihoven a desítky kilobajtů JavaScriptu. V roce 2026 už to všechno zvládne prohlížeč sám. Ukážeme si, jak na to s Popover API, CSS anchor positioningem a View Transitions, a také kde mají své limity.