php_templates в виде класса

Serjoza

Guest
а Zend Studio 2.6.1 для тебя плох?

у меня вопрос к Profic:
как с точки зркния оптимизации ты смотришь на такоей вопрос относительно tmpl_set - есть ли необходимость каждый раз проверять
PHP:
$realPath = $this->_pathAnalyse ($path);
. Скажем при итерации (вопрос в их колличестве), где используется один и тот же путь. Может есть путь более красивый? Если ошибаюсь, извини...

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

Profic

just Profic (PHP5 BetaTeam)
Serjoza:
Код еще не оптимизировался. На данный момент я делаю 100% клон, потом буду заниматься вопросам оптимизации...
Вообще этот _set нужно будет очень конкретно оптимизировать... Он сейчас самый тормозной. В том числе проверка на правильность пути.

А комментарии пишутся по мере непонимания мною моего же исходника :) Скоро выложу RC1, там с комментариев должно быть достаточно :)
 

Profic

just Profic (PHP5 BetaTeam)
Тадам :) Свершилось :)
По тому же адресу лежит RC1. Все функции (вроде) реализованы, тестеры приветствуются.

Доку, что лежит в архиве НЕ читать - она древняя...

Отзывы и баг-репорты постить либо сюда, в форум, либо на мыло, указанное в исходниках :)
 

Profic

just Profic (PHP5 BetaTeam)
Хе, и где отзывы?
Если бы архив не качали, было бы понятно... а то скачивают и молчат как рыбы :)

Я решил пойти немного дальше и при сохранении почти полной совместимости (она нарушается только за счет вывода большего числа ошибок) реализовать немного больше, чем есть.
Уже реализованы:
- includes - шаблонов, локальных, удаленных файлов (хотя последнее редко нужно)
- defaults - установка значений по умолчанию для тегов, включает в себя:
-- установка глобально. Это замена tmpl_set_global, в которой значение устанавливается для всех итераций контекста.
-- устанока массива. В этом случае массив перебирается последовательно для каждой итерации (полезно для раскрашивания таблиц)
- tmpl_set_global и tmpl_set_default_global поддерживают те же типы параметров, что и tmpl_set, за исключением массивов для tmpl_set_global в случае вызова с 2 параметрами.
- может еще что-то есть, не помню :)
- скорость: на Duron-933/256DDR Apache/2.0.44 PHP/4.3.2 обработка 500+ тегов 1.3 секунды. Больше, чем экстеншн, но по моему не плохо... Или нет?

Жду отзывов и комментариев :)

ЗЫ. Может завести отдельную тему?
 

ONK

Пассивист PHPСluba
Автор оригинала: Profic
- скорость: на Duron-933/256DDR Apache/2.0.44 PHP/4.3.2 обработка 500+ тегов 1.3 секунды. Больше, чем экстеншн, но по моему не плохо... Или нет?
Помоему не очень..
Было бы конструктивнее если бы ты привёл время обработки этих тегов ещё и сишным расширением.
 

Profic

just Profic (PHP5 BetaTeam)
ONK:
Привести-то я могу: ~0.1 секунды, НО это НЕ равнозначные времена, т.к. мой класс еще тянет за собой обработку инклюдов, параметров у блоков, deaults-ов и т.д.... а выкинуть все только для разнозначного теста не хочется...

У меня к тому же есть идеи по использованию большего кеширования :)
 

ONK

Пассивист PHPСluba
Одно дело сделать замену один в один, другое дело изобретать собственный велосипед, который никому не понадобится.

Ты мог сделать доброе дело для пользователей php_templates 1.7 сделав средство аварийной замены экстеншена на ПХП код.
Больше ничего делать ненадо, потому что твои навороты будут не совместимы с php_templates 1.7, а следовательно абсалютно бесполезны, т.к. есть обработчики шаблонов написанные на ПХП и работающие незначительно медленнее его, а не в 15 раз как твой ...
 

Profic

just Profic (PHP5 BetaTeam)
ONK:
Есть у меня и "средство аварийной замены". Проходит все тесты написанные когда-то Тони.
Код, который расширяет функциональность пишется не просто так, а для использования в проекте, так что он не пропадет :)

Да, а не мог бы ты привести пример обработчиков "написанных на ПХП и работающих незначительно медленнее его"? С открытым кодом естественно. Очень интересно, как они реализованы...
 

ONK

Пассивист PHPСluba
Посмотри эту тему
http://phpclub.net/talk/showthread.php?s=&threadid=32419

незнаю насколько быстро работает представленный в теме исходник, но Name присылал мне парсёр, который работал не на много медленнее моего собственного. Если сравнивать с php_templates 1.7, то он работает ~ на 20 - 50% медленнее. Можно взять PEAR IT он будет генерить html раза в 4 медленнее, но не в 15...
 

ONK

Пассивист PHPСluba
Скорость не принципиальна для средства замены php_templates 1.7.
Она становится определяющим (очень важным) фактором при выборе обработчика шаблонов для собственных проектов, вот здесь у твоего велосипеда нет никаких шансов.

Я всеголиш говорю что людям нужна копия функциональности 1 в 1 и ничего большее.
 

Profic

just Profic (PHP5 BetaTeam)
Спасибо за ссылку, посмотрю... Может увеличу быстродействие своего движка :)
 

Profic

just Profic (PHP5 BetaTeam)
ONK:
Есть замена 1 в 1, она уже выложена, но народ чего-то не говорит ничего по ее поводу...
[Лирическое отступление]
Блин, может хватит называть мой движок "велосипедом"? :) Он у меня работал в несколько раз быстрее (точно не помню, но ~раз 6) пока не наткнулся на примеры su1d-a, в которых данные для tmpl_set могут быть в практически любой форме... Самой тормозной функцией является как-раз tmpl_set с дикими массивами в качестве параметров :( А нормального фриварного прфайлера я не нашел, чтобы определить, что именно в ней тормозит... :(
[/Лирическое отступление]
Еще раз спасибо за ссылку и за конструктивную (ну не совсем :)) критику
 

ONK

Пассивист PHPСluba
Profic, за велосипед извиняюсь, неправ. ~)
В конце концов ничего сразу идеально не получается, а за замену 1 в 1 я от лица пользователей php_templates 1.7 говорю списибо. (хотя сам я жду 1.8) .
 

Profic

just Profic (PHP5 BetaTeam)
ONK:
И на том спасибо :) Когда хоть один отзыв будет (не считая твоего:)) на RC1 выложу новый вариант, там по мелочам багов пофиксено...

All:
Мне интересно, кто-нибудь мой исходник вообще смотрел? Блин, это мой первый скрипт выкладываемый на всеобщее, так сказать, обозрение и интересно, что думают люди про стиль, код и т.д. Нужно-же как-то развиваться, ну не может быть там все идеально...
 

ONK

Пассивист PHPСluba
Посмотрел.

Мне стиль почти понравился.

Есть некоторое смешение стилей if{}else{} if else{} if{}else + я бы везде использовал скобки и перенося строк после if - ов читабельность от этого вырастет.

Ещё я бы убрал из циклов лишние действия и переоценил необходимость функций в 1,2,3 строчки (в ПХП очень "дорогой" вызов функций).
 
Profic Ты бы у автора php_templates спрашивал.. :)
Код очень даже читабельный... Хочется скорее новый вариант увидеть, так как уже ща делаю проект используя твой класс...
 

Profic

just Profic (PHP5 BetaTeam)
ONK:
>Есть некоторое смешение стилей if{}else{} if else{} if{}else
Дык за количество строк боролся :) мне, в принципе, конструкции типа "else return false" больше нравиться, но могу пересмотреть свой взгляд...

А вот за это
>в ПХП очень "дорогой" вызов функций
спасибо, буду иметь ввиду. Кстати, а насколько "дорогая"? Блин нет в PHP очень удобных сишных define-ов :( А код вызывается кучу раз... придется всюду его писать и влучае чего его исправлять тоже всюду... хотелось же структурированности. Теперь понятно почему тормозит tmpl_set... там функций вызывается туева куча...
И циклы проверю...
Спасибо :)

Winnie Pooh:
хм, тебе новый вариант моего класса или заменителя php_templates нужен? В общем ждите, сегодня, скорее всего будет. :)

su1d: ты там где?
 

ONK

Пассивист PHPСluba
По скорости разница приблизительно такова:
вот этот метод
function _lastIterNumber (&$_iters) {
return sizeof ($_iters) - 2;
}
отработает минимум раз в 6 - 7 медленнее чем просто sizeof ($_iters) - 2, а самое главно его необходимость очень сомнительна, ты его используеш всего в 3-х местах....

мне, в принципе, конструкции типа "else return false" больше нравиться
лучше придерживаться одного стиля, иначе очень сильно падает читабельность кода. Темболее что скобки очень помогают.

Я сам нелюблю лишние переносы строк, но бороться за количество строк в файле убирая переносы строк не имеет никакого смысла. Для интерпетатора ПХП пополам сколько в коде строк, они не влияют на скорость обработки кода.

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

ONK

Пассивист PHPСluba
Winnie Pooh, я сейчас потестил его класс, к сожалению пока результат очень печальный. Скорость генерирования кода очень сильно зависит от количества генерируемых блоков, и изменяется от 25 кратного замедления на 100 блоках до 100 кратного замедления на 1000 блоках, при этом речь идёт о простейем шаблоне. Проверял на тесте который лежит в исходнках (test1.php).
 
Сверху