Middle+
Rääkige disainimustritest, mida kasutatakse koodi täitmise sageduse optimeerimiseks.
sobes.tech AI
Vastus AI-lt
Koodi täitmise sageduse optimeerimiseks kasutatakse sageli disainimustreid, mis on suunatud lisakulude vähendamisele, korduvate arvutuste vältimisele ja ressursside tõhusale haldamisele.
Peamised mustrid:
-
Singleton
- Tagab ainult ühe eksemplari loomise. Kasulik ühiste ressursside, nagu andmebaasi ühenduste või vahemälu, kasutamiseks, vältides nende korduvat loomist.
<?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
- Keskne hoidla ühistele objektidele ja teenustele. Annab võimaluse saada juurdepääs varem loodud või konfigureeritud ressurssidele ilma nende uuesti initsialiseerimata.
<?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
- Kasutatakse suure hulga väikeste objektide tõhusaks haldamiseks, jagades nende olekut. See võimaldab säästa mälu ja aega objektide loomisel. Näiteks võib kasutada ühiseid objekte sama sümboli, värvi jms esitamiseks.
-
Proxy
- Pakub asendajat või "asendajat" teisele objektile. Võib kasutada hilinenud laadimise (Lazy Loading) puhul, kui objekt luuakse ainult esimese pöördumise korral, või tulemuste vahemällu salvestamiseks.
-
Cache (või Memoization - mitte päris muster, pigem tehnika)
- Kulukate funktsioonide või päringute tulemuste salvestamine, et korduvatel väljakutsetel sama argumendiga tagastada salvestatud tulemus, mitte uuesti arvutada. Sageli rakendatakse teiste mustrite raames või eraldi komponendina.
<?php function expensiveFunction($arg) { static $cache = []; // Lihtne vahemälu implementatsioon if (isset($cache[$arg])) { echo "Using cache for $arg\n"; return $cache[$arg]; } echo "Calculating for $arg\n"; // Kuluka operatsiooni imitatsioon sleep(1); $result = $arg * 2; $cache[$arg] = $result; return $result; } expensiveFunction(10); // Arvutatakse ja salvestatakse vahemällu expensiveFunction(10); // Kasutatakse vahemälu -
Object Pool
- Hoidke valmisolekus olevaid objekte, mida saab taaskasutada, vältides uute loomist. Kasulik kulukate objektide, näiteks andmebaasi ühenduste, puhul.
-
Lazy Loading
- Eraldi põhimõte, mida sageli rakendatakse Factory, Proxy või teiste mustrite abil. Objekt või ressurss laaditakse ainult siis, kui see on tõeliselt vajalik, vähendades algset koormust.
Iga neist mustritest aitab vähendada liigseid operatsioone, tõhusalt kasutada ressursse ning seeläbi optimeerida koodi täitmise sagedust ja kiirust. Mustri valik sõltub konkreetse ülesande ja konteksti nõuetest.