Sobes.tech
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:

  1. 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;
        }
    }
    
  2. 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]);
        }
    }
    
  3. 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.
  4. 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í.
  5. 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
    
  6. 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.
  7. 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.