Приведите свой пример для object pool

Есть известный нам паттерн object pool. Его рекомендуют как performance паттерн, потому что можно сразу проинициировать N тяжелых объектов, и дальше работать с ними.

Во многих ресурсах по PHP именно на это делают упор, и , соответственно, мне интересно: что же на практике может быть этот объект, что в вебе его круто было бы синициировать сразу.

ИЛИ,

приведите пример со своей практики, какая у вас была задача, и чего вы добились благодаря внедрению пула объектов

P.S я знаю как его использует game-dev. Так же, видел реализацию на js, с примером, когда код использовался в ограниченной по памяти среде.

но, для себя пока кроме пула воркеров ничего внятно придумать не смог.


Ответы (1 шт):

Автор решения: DevNP

на сколько мне известно пул объектов применяется в OpenCart, Fat-Free Framework и т.д.

для меня это вполне удобный паттерн.

вот он реализован в OpenCart

final class Registry {
    private $data = array();

    public function get($key) {
        return (isset($this->data[$key]) ? $this->data[$key] : NULL);
    }

    public function set($key, $value) {
        $this->data[$key] = $value;
    }

    public function has($key) {
        return isset($this->data[$key]);
    }
}
// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

// Config
$config = new Config();
$registry->set('config', $config);

// Request
$request = new Request();
$registry->set('request', $request);

// Response
$response = new Response();
$response->addHeader('Content-Type: text/html; charset=utf-8');
$response->setCompression($config->get('config_compression'));
$registry->set('response', $response);

// Document
$registry->set('document', new Document());

и в самом контроллере они вызывается примерно так

class ControllerCommonHome extends Controller {
    public function index() {
        $this->document->setTitle($this->config->get('config_title'));
        $this->document->setDescription($this->config->get('config_meta_description'));

        $this->data['heading_title'] = $this->config->get('config_title');

     $this->response->setOutput($this->render());
    }

}

подобных примеров можно найти кучу если захотеть.

→ Ссылка