Вопрос по Кэшированию

Добрый день!

В настоящий момент изучаю PHP. Есть некоторые теоретические познания по PHP, некоторый практический опыт программирования на других ЯП.
Читаю книгу Мэтта Зандстра "PHP. Объекты, шаблоны и методики программирования".
Не могу понять следующий момент..
В описании шаблона Front Controller, автор создаёт объект класса ApplicationRegistry, в который загружаются данные конфигурации из XML файла. Сам ApplicationRegistry представляет собой Singleton, то есть считывание XML файла происходит один раз - при создании объекта. Автор упоминает данный приём как кэширование, в результате которого ресурсоёмкая инициализация происходит один раз, а дальше данные хранятся в кэше и файл не приходится читать при каждом запросе.
Мне не вполне понятно, каким образом всё это работает? Ведь по сути, каждый запрос - это запуск нового приложения. То есть, при переходе по любой из ссылок, приложению придётся заново считывать файл конфигурации.
Или я не правильно понимаю идею Автора?

Извините за такой, возможно, глупый вопрос, но с PHP я только разбираюсь, а стоит определённая практическая задача, которую нужно будет реализовать в ближайшее время.

Спасибо.
 

vasinsky

Новичок
не читал эту книгу, но может автор имеет ввиду не кеш, а память? по крайней мере - в контексте того текста что ты привёл - это выглядит именно так

хотя кеш бывает не только на файлах, но и в памяти, взять хотя бы memcached

я ничего не утверждаю, это простое имхо
 
Да, данные хранятся в памяти. Именно это он называет кешированием, но... Никаких специальных расширений для PHP там не упоминается.. Вот у меня и возник вопрос - в чём тогда получается выигрыш в производительности, если по-любому при каждом запросе алгоритм один и приходится создавать объект класса конфигурации...
 

AmdY

Пью пиво
Команда форума
Кэширование бывает разных уровней. Можешь почитать теорию и пример реализации в ZF http://framework.zend.com/manual/1.12/ru/zend.cache.html или погуглить другие источники.
Ты понял всё правильно, здесь описан кэш который действует в рамках одного запроса.
 

vasinsky

Новичок
выигрыш от того - что данные один раз читаются из файла в память и там находятся. не нужно снова раз за разом читать файл.

Именно это он называет кешированием
а файловый кеш называется - созданием файлов????)
 
Про кеширование в ZF почитаю. По своему изначальному вопросу уяснил, что выигрыш заключается в единоразовой загрузке всех данных конфигурации и последующему обращению к этим данным в объекте, а не в файле, но в рамках работы одного запроса.
Спасибо.
 

riff

Новичок
Сам ApplicationRegistry представляет собой Singleton, то есть считывание XML файла происходит один раз
Думаю ты не верно акценты расставил. Мне кажется, в книге говорится не столько о единоразовой загрузке файла, сколько о примере класса, который создаётся один раз, и используется в любом месте проекта его единая копия.

Т.е. вместо globals, передачи в параметрах и $app = new Application(); каждый раз когда он тебе нужен, ты используешь Application::getInstance()->...
а уж что там xml, подключение к базе, функции, просто строка с названием сайта, дело десятое.
 
Да нет... Просто неверно выразил ход своих мыслей.. Пропустил кусок рассуждений о том, что считывание производится при создании объекта, а раз тут применён шаблон Singleton, следовательно и считывание происходит один раз.
 

riff

Новичок
Тогда, да. "кэширование" в данном случае не самый удачный термин, так можно и $a = 'zzz'; кэшированием обозвать.
 

AmdY

Пью пиво
Команда форума
Тогда, да. "кэширование" в данном случае не самый удачный термин, так можно и $a = 'zzz'; кэшированием обозвать.
да, конечно, это кэширование в переменную. Вполне логично.
«То, что мы не оправдали ваши ожидания, – ваши проблемы» ©Андрей Аршавин
 

MiksIr

miksir@home:~$
Не, $a = 'zzz'; не будет кешированием ;) Кеширование - это сохранение информации в промежуточном буфере с целью быстрого доступа.
Вот $a = file('...') будет. И даже $a = $b * $c будет кешированием - сохранение результатов расчета в промежуточном буфере - переменной.
 
Сверху