Sobes.tech
Middle+

Povedzte mi o návrhových vzorcoch, ktoré sa používajú na optimalizáciu frekvencie vykonávania kódu.

sobes.tech AI

Odpoveď od AI

Za optimalizáciu frekvencie vykonávania kódu sa často používajú vzory návrhu zamerané na zníženie režijných nákladov, vyhýbanie sa opakovaným výpočtom a efektívne riadenie zdrojov.

Hlavné vzory:

  1. Singleton

    • Zabezpečuje, že sa vytvorí iba jedna inštancia triedy. Je užitočný na prístup ku spoločným zdrojom, ako sú pripojenia k databáze alebo cache, a zabraňuje ich viacerému vytváraniu.
    <?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žisko pre spoločné objekty a služby. Umožňuje prístup k už vytvoreným alebo nakonfigurovaným zdrojom bez potreby ich opätovnej inicializácie.
    <?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

    • Efektívne riadenie veľkého množstva malých objektov so podobným správaním, zdieľaním ich stavu. Umožňuje ušetriť pamäť a čas na vytváranie objektov. Príkladom môže byť použitie spoločných objektov na reprezentáciu rovnakých znakov, farieb atď.
  4. Proxy

    • Poskytuje náhradníka alebo "zástupcu" pre iný objekt. Môže sa použiť na odložené načítanie (Lazy Loading), keď sa objekt vytvára iba pri prvom prístupe k nemu, alebo na kešovanie výsledkov operácií.
  5. Cache (alebo Memoization - nie je úplne vzor, skôr technika)

    • Ukladanie výsledkov vykonania nákladných funkcií alebo dopytov, aby pri opakovanom volaní so rovnakými argumentmi sa vrátil uložený výsledok namiesto opätovného výpočtu. Často sa implementuje v rámci iných vzorov alebo ako samostatná komponenta.
    <?php
    function expensiveFunction($arg) {
        static $cache = []; // Jednoduchý cache
    
        if (isset($cache[$arg])) {
            echo "Použitie cache pre $arg\n";
            return $cache[$arg];
        }
    
        echo "Výpočet pre $arg\n";
        // Imitácia nákladnej operácie
        sleep(1);
        $result = $arg * 2;
        $cache[$arg] = $result;
    
        return $result;
    }
    
    expensiveFunction(10); // Vypočíta a uloží do cache
    expensiveFunction(10); // Použije cache
    
  6. Object Pool

    • Uchováva bazén pripravených na použitie objektov, ktoré je možné znovu použiť namiesto vytvárania nových. Užitečné pre objekty, ktorých vytvorenie je nákladné, napríklad pripojenia k databáze.
  7. Lazy Loading

    • Samostatný princíp, často implementovaný pomocou Factory, Proxy alebo iných vzorov. Objekt alebo zdroj sa načítava iba vtedy, keď je naozaj potrebný, čím sa znižuje počiatočné zaťaženie.

Každý z týchto vzorov pomáha znižovať nadbytočné operácie, efektívne využívať zdroje a tým optimalizovať frekvenciu a rýchlosť vykonávania kódu. Výber vzoru závisí od konkrétneho úlohy a kontextu.