Очень интересная задача и на первый взгляд абсолютно безсмысленная… Но всё же это не так. Сам ощутил необходимость возможности выводить контент в определённых местах уже после того, как он был выведен. Ну к примеру для установки заголовков типа settitle когда неизвестно какми должен быть заголовок до того как начали работать компоненты цмски на страниц.
Алгоритм работы данной технологии:
1. любой исходящий поток из PHP скрипта буферизируется
2. как только в коде встречается одна из функций, которые помеченны как отложенные, то:
1. весь буферизированный до этого контент запоминается в очередном элементе стэка A
2. в стэк A добавляется пустой элемент, который в дальнейшем будет заполнен результатом выполнения отложенной функции
3. имя отложенной функции запоминается в стэке B
4. буфер очищается и буферизация снова включается
Таким образом существует стэк A, в котором находится весь контент страницы разбитый на части. В этом же стэке есть пустые элементы предназначенные для их дальнейшего заполнения результатами отложенных функций.
Также существует стэк B, в котором запоминаются имена и параметры отложенных функции в порядке их следования в коде.
3. в конце страницы в служебной части эпилога выполняются следующие действия:
1. все отложенные функции из стэка B начинают выполняться одна за другой
2. результаты их выполнения вставляются в специально предназначенные для этого места в стэк A
3. весь контент из стэка A «склеивается» (конкатенируется) и выводится на экран
Таким образом, данная технология позволяет фрагментировать весь контент страницы, разбивая его на части с помощью специальных функций обеспечивающих временное откладывание выполнения других функций (отложенных функций). В конце страницы все отложенные функции выполняются одна за другой и результаты их выполнения вставляются в отведенные для этого места внутри фрагментированного контента страницы. Затем весь контент склеивается и выводится в поток (отправляется браузеру посетителя сайта).
Читать полностью