Sobes.tech
Middle+

Kodning bajarilish chastotasini optimallashtirish uchun ishlatiladigan dizayn shablonlari haqida gapiring.

sobes.tech AI

AIdan javob

Коднинг ишлаш тезлигини оптималлаштириш учун, одатда, умумий харажатларни камайтириш, такрорланадиган ҳисоблашларни олдини олиш ва ресурсларни самарали бошқаришга қаратилган дизайн шабллари қўлланилади.

Асосий шабллар:

  1. Singleton

    • Синфнинг фақат битта нусхасини яратишни таъминлайди. Бу умумий ресурсларга, масалан, маълумотлар базаси уланмалари ёки кешларга киришда фойдали бўлиб, уларнинг кўп марта яратилишини олдини олади.
    <?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

    • Ўзгартирилган объектлар ва хизматлар учун марказий сақлаш жойи. Ушбу ресурсларга аввалдан яратилган ёки конфигурацияланган ҳолда кириш имконини беради, уларни қайтадан инициализация қилиш шарт эмас.
    <?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

    • Кичик объектлар сони кўп бўлганда, уларнинг ҳолатини бўлишиш орқали самарали бошқариш учун қўлланилади. Бу ёдлаш ва яратиш вақтини тежайди. Масалан, бир хил белгилар, ранглар ва ҳоказолар учун умумий объектлардан фойдаланиш.
  4. Proxy

    • Бошқа объект учун ўрнини эгаллайди ёки "ўртачи" вазифасини бажаради. Lazy Loading (кечиктирилган юклаш) ёки натижаларни кешлаш учун қўлланилиши мумкин.
  5. Cache (ёки Memoization - тўғридан-тўғри шаблон эмас, балки техника)

    • Қимматли функциялар ёки сўровлар натижаларини сақлаб, уларни қайта чақирганда, қайта ҳисобламасдан, сақланган натижани қайтариш. Бошқа шаблонлар доирасида ёки алоҳида компонент сифатида амалга оширилиши мумкин.
    <?php
    function expensiveFunction($arg) {
        static $cache = []; // Осон кеш иловаси
    
        if (isset($cache[$arg])) {
            echo "Кешдан фойдаланилмоқда for $arg\n";
            return $cache[$arg];
        }
    
        echo "Ҳисоблаш for $arg\n";
        // Қимматли операцияни имитациялаш
        sleep(1);
        $result = $arg * 2;
        $cache[$arg] = $result;
    
        return $result;
    }
    
    expensiveFunction(10); // Ҳисобланади ва кешга сақланади
    expensiveFunction(10); // Кешдан фойдаланилади
    
  6. Object Pool

    • Тайёр объектлар пулларини сақлайди, уларни қайтадан яратиш ўрнига қайта фойдаланиш мумкин. Бу, масалан, маълумотлар базаси уланмалари каби қиммат бўлган объектлар учун фойдали.
  7. Lazy Loading

    • Алоҳида принцип бўлиб, кўпинча Factory, Proxy ёки бошқа шаблонлар орқали амалга оширилади. Объект ёки ресурс фақат унга ҳақиқатан зарур бўлганда юкланади, бу эса бошланғич юкламани камайтиради.

Ҳар бир шаблон операцияларнинг такрорланишини камайтиришга, ресурсларни самарали ишлатишга ва шу орқали коднинг ишлаш тезлиги ва тезлигини оптималлаштиришга ёрдам беради. Шаблон танлаш конкрет вазифа ва контекстга боғлиқ.