Приведите свой пример для object pool
Есть известный нам паттерн object pool. Его рекомендуют как performance паттерн, потому что можно сразу проинициировать N тяжелых объектов, и дальше работать с ними.
Во многих ресурсах по PHP именно на это делают упор, и , соответственно, мне интересно: что же на практике может быть этот объект, что в вебе его круто было бы синициировать сразу.
ИЛИ,
приведите пример со своей практики, какая у вас была задача, и чего вы добились благодаря внедрению пула объектов
P.S я знаю как его использует game-dev. Так же, видел реализацию на js, с примером, когда код использовался в ограниченной по памяти среде.
но, для себя пока кроме пула воркеров ничего внятно придумать не смог.
Ответы (1 шт):
на сколько мне известно пул объектов применяется в 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());
}
}
подобных примеров можно найти кучу если захотеть.