Sobes.tech
Middle+

Papaskinkite apie dizaino modelius, naudojamus siekiant optimizuoti kodo vykdymo dažnį.

sobes.tech AI

Atsakymas iš AI

Optimizuojant kodo vykdymo dažnumą dažnai naudojami projektavimo modeliai, skirti sumažinti išlaidas, išvengti pakartotinių skaičiavimų ir efektyviai valdyti išteklius.

Pagrindiniai modeliai:

  1. Singleton

    • Užtikrina tik vieno objekto sukūrimą. Naudingas bendrų išteklių, tokių kaip duomenų bazės jungtys ar talpyklos, prieigai, išvengiant jų daugybinio sukūrimo.
    <?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

    • Centrinis saugykla bendriems objektams ir paslaugoms. Leidžia pasiekti anksčiau sukurtus ar sukonfigūruotus išteklius be jų pakartotinio inicializavimo.
    <?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

    • Naudojamas efektyviam didelio kiekio mažų objektų valdymui, kurie dalijasi būsenomis. Tai leidžia sutaupyti atminties ir laiko kuriant objektus. Pavyzdžiui, bendrų objektų naudojimas vienodų simbolių, spalvų ir pan. atvaizdavimui.
  4. Proxy

    • Pateikia kitą objektą kaip pakaitalą ar "pakeitėją". Gali būti naudojamas vėluoto įkėlimo (Lazy Loading) atveju, kai objektas sukuriamas tik pirmo kreipimosi metu, arba rezultatų talpyklavimui.
  5. Cache (arba Memoization - ne visiškai modelis, labiau technika)

    • Laikymas brangiai kainuojančių funkcijų ar užklausų rezultatų, kad pakartotinai iškvietus su tais pačiais argumentais, būtų grąžintas išsaugotas rezultatas, o ne vėl skaičiuojama. Dažnai įgyvendinama kaip dalis kitų modelių arba kaip atskiras komponentas.
    <?php
    function expensiveFunction($arg) {
        static $cache = []; // Paprastas talpyklos įgyvendinimas
    
        if (isset($cache[$arg])) {
            echo "Using cache for $arg\n";
            return $cache[$arg];
        }
    
        echo "Calculating for $arg\n";
        // Brangios operacijos imitacija
        sleep(1);
        $result = $arg * 2;
        $cache[$arg] = $result;
    
        return $result;
    }
    
    expensiveFunction(10); // Skaičiuojama ir saugoma talpykloje
    expensiveFunction(10); // Naudojama talpykla
    
  6. Object Pool

    • Laiko paruoštus naudoti objektų baseinus, kuriuos galima pakartotinai naudoti vietoj naujų kurimo. Naudinga sudėtingiems objektams, pavyzdžiui, duomenų bazės jungtims.
  7. Lazy Loading

    • Atskiras principas, dažnai įgyvendinamas naudojant Factory, Proxy ar kitus modelius. Objektas ar išteklius įkeliamas tik tada, kai jis tikrai reikalingas, sumažinant pradines apkrovas.

Kiekvienas iš šių modelių padeda sumažinti perteklines operacijas, efektyviai naudoti išteklius ir, kaip rezultatas, optimizuoti kodo vykdymo dažnumą ir greitį. Modelio pasirinkimas priklauso nuo konkrečios užduoties ir konteksto.