Я пытаюсь загрузить библиотеки, если они еще не загружены (либо библиотеки CI, либо пользовательские) во многих разных точках веб-сайта. Поэтому я хочу проверить это.
Я выполнил поиск в библиотеке Loader и нашел функцию is_loaded (), поэтому я мог бы сделать это, например:
if ($this->load->is_loaded('form_validation') === false) { $this->load->library('form_validation'); }
Странная вещь с этим (с включенным профилировщиком) заключается в том, что память поднимается, что заставляет меня задаваться вопросом, правильно ли это или нет.
Вокруг строки 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. UPDATE с использованием Codeigniter 2.2.0: тест повторялся с использованием 1000 итераций (не 20, как раньше). Результаты остаются неизменными. Потребление памяти было следующим: 2128b, 1856b, 1688b, 1456b
@Tim Dev отмечает в комментарии, что этот тест не нужен, показывает самый быстрый код, но только самый низкий код потребления памяти.