Да, задавался я таким вопросом и вот что сказал мой опыт:
1. Кешировать результат отрисовки всего лучше у nginx или заголовком 304 Not Modified.
2. Если нужно частичное в шаблоне кеширование, то можно ввести тег {cache id="..."}{/cache} который будет по id сохранять и забирать из кеша данные. Появляется вопрос о настройки кешера для тега. Реализация будет отдельным пакетом, который добавляет тег {cache}.
3. Если нужно закешировать результат шаблона целиком то можно переопределить метод display + тег {include} на котором базируются другие методы и там завести необходимые ключи для кеша. Реализация будет отдельным пакетом, который предоставляет trait и/или класс переопределяющий метод display, адаптируя его для кеширования.
Все варианты выполнимы и могут быть реализованы как сторонний пакет. Сам пока не остановился на определенном варианте. Но во всех случая ключ для кеша указывается в ручную.
Если включен флаг Fenom::FORCE_COMPILE то всегда перекомпилирует, это для отладки. Если включен флаг Fenom:: AUTO_RELOAD то шаблонизатор перед использованием шаблона проверяет mtime оригинального шаблона и его кеша, если не совпадают — перекомпилирует. В других случая компиляция вызывается только если нет кеша шаблона.
Оп-кешер, только кеширует оп код, но не ускоряет его. Прирост может быть только за счет ускорения include/require. Не исключено, что на холодный старт это могло повлиять, поэтому я добавлю в доку тесты с включенным APC, пока просто времени не было так как там надо все делать изолировано друг от друга, что бы один тест не повлиял на результат другого.
Согласен тесты довольно синтетические, но общее представление они дают.
Полагаю в имеете ввиду Fenom::AUTO_ESCAPE автоэкранирование переменных? Да, в документации, по ошибке, пропущена данная опция, исправлю. На счет модификатора raw, пока не уверен как работает в других шаблонизаторах, но тут за него отлично сойдет модификатор unescape
Вы не поверитие, это goto заменило 80 строк кода, один класс и 2 блока с try {} catch{}. Так вышло что тут было удобнее использовать goto, как бы не хотелось
Я тоже планировал это сделать, но не смог нащупать ту самую границу когда шаблон становится не нативным. Например для наследования нативно не получится написать шаблон, нужны классы, методы и тд… микро шаблонизатор, что-ли.
В итоге получалась какая-то копипаста из шаблонов Fenom, там и так все просто до непреличия
Ну да, я имел ввиду что false это тоже что-то, в отличии от null и хпх пытается превратить это в массив что бы посчитать. Немного криво, согласен, но логика ясна хотя бы
1. Кешировать результат отрисовки всего лучше у nginx или заголовком 304 Not Modified.
2. Если нужно частичное в шаблоне кеширование, то можно ввести тег {cache id="..."}{/cache} который будет по id сохранять и забирать из кеша данные. Появляется вопрос о настройки кешера для тега. Реализация будет отдельным пакетом, который добавляет тег {cache}.
3. Если нужно закешировать результат шаблона целиком то можно переопределить метод display + тег {include} на котором базируются другие методы и там завести необходимые ключи для кеша. Реализация будет отдельным пакетом, который предоставляет trait и/или класс переопределяющий метод display, адаптируя его для кеширования.
Все варианты выполнимы и могут быть реализованы как сторонний пакет. Сам пока не остановился на определенном варианте. Но во всех случая ключ для кеша указывается в ручную.
Согласен тесты довольно синтетические, но общее представление они дают.
2. Какого рода кеширование?
В итоге получалась какая-то копипаста из шаблонов Fenom, там и так все просто до непреличия