Middle+
Povězte mi o návrhových vzorech používaných k optimalizaci frekvence provádění kódu.
sobes.tech AI
Odpověď od AI
Pro optimalizaci výkonu kódu se často používají návrhové vzory, které směřují ke snižování režijních nákladů, vyhýbání se opakovaným výpočtům a efektivní správě zdrojů.
Hlavní vzory:
-
Singleton
- Zajišťuje, že je vytvořen pouze jeden instance třídy. Je užitečný pro přístup ke sdíleným zdrojům, jako jsou připojení k databázi nebo cache, a zabraňuje jejich vícenásobnému vytváření.
<?php class Singleton { private static $instance = null; private function __construct() { /* ... */ } private function __clone() { /* ... */ } private function __wakeup() { /* ... */ } public static function getInstance(): self { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } } -
Registry
- Centralizované úložiště pro sdílené objekty a služby. Umožňuje přístup k již vytvořeným nebo nakonfigurovaným zdrojům bez nutnosti jejich opětovné inicializace.
<?php class Registry { private static $data = []; public static function set(string $key, $value): void { self::$data[$key] = $value; } public static function get(string $key) { return self::$data[$key] ?? null; } public static function has(string $key): bool { return isset(self::$data[$key]); } } -
Flyweight
- Efektivní správa velkého množství malých objektů se podobným chováním tím, že sdílí jejich stav. Umožňuje ušetřit paměť a čas při vytváření objektů. Příkladem může být použití sdílených objektů pro reprezentaci stejných znaků, barev atd.
-
Proxy
- Poskytuje náhradníka nebo "zástupce" pro jiný objekt. Může být použit pro odložené načítání (Lazy Loading), kdy je objekt vytvořen až při prvním přístupu k němu, nebo pro cachování výsledků operací.
-
Cache (nebo Memoization - není úplně vzor, spíše technika)
- Ukládání výsledků nákladných funkcí nebo dotazů, aby při opakovaném volání se stejnými argumenty bylo vráceno uložené výsledné místo opětovného výpočtu. Často je implementováno v rámci jiných vzorů nebo jako samostatná komponenta.
<?php function expensiveFunction($arg) { static $cache = []; // Jednoduchá cache if (isset($cache[$arg])) { echo "Použití cache pro $arg\n"; return $cache[$arg]; } echo "Výpočet pro $arg\n"; // Imaginární nákladná operace sleep(1); $result = $arg * 2; $cache[$arg] = $result; return $result; } expensiveFunction(10); // Vypočítá a uloží do cache expensiveFunction(10); // Použije cache -
Object Pool
- Uchovává pool připravených k použití objektů, které lze znovu použít místo vytváření nových. Užitečné pro objekty, jejichž vytvoření je nákladné, například připojení k databázi.
-
Lazy Loading
- Samostatný princip, často implementovaný pomocí Factory, Proxy nebo jiných vzorů. Objekt nebo zdroj se načte až tehdy, když je skutečně potřeba, čímž se snižuje počáteční zátěž.
Každý z těchto vzorů pomáhá snižovat nadbytečné operace, efektivně využívat zdroje a tím optimalizovat frekvenci a rychlost provádění kódu. Výběr vzoru závisí na konkrétním úkolu a kontextu.