CodeIgniter - загрузка библиотек, если они еще не загружены

То, что я пытаюсь сделать, это загрузить библиотеки, если они еще не загружены (либо библиотеки CI, либо пользовательские) во многих различных точках веб-сайта. Поэтому я хочу проверить это.

Я выполнил поиск в библиотеке Loader и нашел функцию is_loaded(), так что я мог бы сделать это, например:

if ($this->load->is_loaded('form_validation') === false) {
    $this->load->library('form_validation');            
}

Странная вещь с этим (с включенным профилировщиком) состоит в том, что память увеличивается, что заставляет меня задаться вопросом, правильный ли это путь или нет.

1 ответ

Решение

Вокруг строки 914 в system/core/Loader.php, Codeigniter выполняет проверку, загружена ли библиотека, и не будет загружать ее снова. Тем не менее, эти проверки также занимают немного памяти. Чтобы сделать вывод, какой способ лучше всего подходит для загрузки библиотек, я сделал небольшой тест (очистка памяти после каждой попытки), и вот вывод:

Просто загрузите библиотеку как обычно $this->load... и пусть Codeigniter справится с этим


Ориентир:

$this->load->library('session');

После начальной загрузки сеансового класса Codeigniter я тестировал различные способы загрузки библиотеки и / или проверки, не загружена ли она уже. Каждая из этих строк была выполнена отдельно 20 раз:


ТЕСТ ПОТРЕБЛЕНИЯ ПАМЯТИ (не скорость!)

if(!$this->load->is_loaded('session')) $this->load->library('session');

Это потребляет 48.256 байт


if(!class_exists('ci_session')) $this->load->library('session');

Это потребляет 39,824 байт


if(!isset($this->session)) $this->load->library('session');

Это потребляет 31,904 байт


$this->load->library('session');

Это потребляет 21,790 байт


После повторения теста еще раз результаты были такими же, поэтому я думаю, что это может быть просто актуально! Пожалуйста, прокомментируйте, если я ошибаюсь!


07.08.2014. ОБНОВЛЕНИЕ с использованием Codeigniter 2.2.0: тест был повторен с использованием 1000 итераций (а не 20, как раньше). Результаты остаются прежними. Потребление памяти было следующим: 2128b, 1856b, 1688b, 1456b

@Tim Dev отмечает в комментарии, что в этом тесте нет необходимости показывать самый быстрый код, а только код с самым низким потреблением памяти.

Другие вопросы по тегам