Два вопроса по недошаблонизатору Blitz или наглядно о том, какие не должны быть шаблонизаторы

Push_Ok

Новичок
наверно можно придумать 100500 примеров когда да без логики в шаблоне сложно, однако css тоже часть отображения ну js поверх те в целом упралять вью можно несколькими путями вот как в этом примере с котого все началось


т.е с одной стороны логика в шаблонах нужна
PHP:
{{ BEGIN regions }}
    <input type="checkbox" name="region[{{ $region_id }}]" value="1" />
        {{IF $region_id == 1}}<b>{{END}}
            {{ $region_name }}
        {{IF $region_id == 1}}</b>{{END}}
{{ END }}
с другой стороны не совсем
PHP:
{{ BEGIN regions }}
<input type="checkbox" name="region[{{ $region_id }}]" value="1" class="{{$bold}}"/>{{ $region_name }}
{{ END }}
ну и теражруемые решения испольщующие блитз это уже что-то неожиданное, вряди хостеры все возьмут и собирут к нему extension.
врядли в пакеты под debian\ubuntu войдет extention для блитза, т.е этот продукт под какой-то отдельный проект в вакуме.
т.е смарти хорош тем что он на пхп, так же как и большинство шаблонизаторов для пыха. а блитз в целом удобный не быстрый шаблонизатор но уже требующий танцев что бы его использовать.
 

pilot911

Новичок
я переписал блиц на чистый пхп, добавил сравнение ==, <, > в IF и UNLESS
вот только это отняло время и является велосипедостроением
проще взять Смарти3, у которой возможностей побольше
 

pilot911

Новичок
я не знаю, есть ли в Смарти3 фетч блока по пути

то есть, могу ли я взять содержимое вложенного блока по пути, как это делается в Блиц ->fetch('/block_1/block_2/', $data_array); ?
 

DiMA

php.spb.ru
Команда форума
> а заявление DiMA голословно. т.е есть реально пример когда блитц работает медленние того же смарти?

Это не мое исследование (автор может добавить деталей, я уже не помню). 2 года назад мы изучили тему. Было выяснено, что неустранимый косяк блитца в том, что он экстеншн. При наличии в шаблонах большого числа хелперов, переключение исполнения между блитцом и пхп создавало тормоза. Если точно, это косяк не самого блитца, а комбинации самого пхп и экстеншена в самом механизме переключения контекста. Если сделать патч к пхп и встроить код блитца как нативные функции - исчезнет корень проблемы, он опять будет применим.

Если ты утверждаешь, что у тебя блитц летает, это значит:
- за 2 года пхп чудесным образом вылечился и экстеншены можно применять эффективно
- у тебя примитивные шаблоны, проблемы нет
- у тебя сложные шаблоны, но ты не знаешь, что они тормозят (не проводил исследования, пишешь непроверенные данные)

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

> не очень ясно как оно собирается работать быстрее чем просто echo $aa;

Ты наверно опять не понял... мы пишем шаблон, как и в блитце. Далее он компилится в пхп код. При исполнении шаблона никаких подстановок или парсинга нет, никакие библиотеки шаблонизатора не используются, исполняется нагенеренный пхп файл с нечитаемым говнокодом. Компиляция идет один раз при правке файла. Поэтому такой подход очень даже может конкурировать с чистым пхп кодом. pilot911 - ты такой же вариант сделал?
 

Absinthe

жожо
Иван Redjik Матвеев верстальщикам неудобно. Плюс больше между собой верстальщик и программист должны общаться.
 

Redjik

Джедай-мастер
я про скорость больше интересовался (+ где сейчас работаю - верстка тоже на мне... студия маленькая, так что не много беготни от программиста до верстальщика)
 

DiMA

php.spb.ru
Команда форума
у нас шаблоны блитца в формате xslt
компилится в страшнейший исполняемый пхп говногод
 

AmdY

Пью пиво
Команда форума
Иван Redjik Матвеев
для xslt вижу единственное применение - если шаблоны будут использоваться кодом на другом языке программирования. кстати, мы использовали http://www.exslt.org/, тогда удобство немного приближается к смарти. а по скорости должен быть медленнее из-за процессинга, плюс при тестировании часто забывают, что генерация xml тоже тяжелее привычного массива.

кто использует smarty 3, скажите, неужели он заработал нормально?
 

pilot911

Новичок
да какая разница, лишь бы работал шустро.. все равно в код не полезет никто
 

AmdY

Пью пиво
Команда форума
pilot911
для меня скорость ни разу не параметр, а вот в своё время переписать свои шаблоны завести под тройкой я не смог, валились ошибки, которые не удалось исправить даже foreach при сравнении объектов вываливался с фатальной ошибкой.
 

pilot911

Новичок
pilot911
для меня скорость ни разу не параметр, а вот в своё время переписать свои шаблоны завести под тройкой я не смог, валились ошибки, которые не удалось исправить даже foreach при сравнении объектов вываливался с фатальной ошибкой.

понятно... наверное, стоит попробовать текущую версию
вообще, смотрю на Симфони2 с его шаблонами и прочими инструментами работы с формами - кто-нибудь имеет положительный опыт работы с Sf2 ?
 

fixxxer

К.О.
Партнер клуба
Blitz весьма специфичная вещь. Он задумывался для такой схемы разработки, когда верстальщик ничего не знает ни о какой логике, кроме _чистой_ логики отображения (ну то есть о такищ вещах как if ($region['region_id'] == 1) он вообще не знает), такие вещи пишет программист в View-контроллере, устанавливая нужные флаги, а в blitz одним единственным set() передается массив переменных и итераций. И в этом случае blitz работает быстро. Если такой подход вам не нравится, вам не нужен Blitz.

Если же хочется большей управляемости со стороны шаблона, приходится добавлять массу callback-ов, а это переключения контекста из php-ext в виртуальную машину php и обратно, что является довольно ресурсоемкой процедурой. И в таком случае уже быстрее работает plain php. Тут уже Blitz плохо подходит, и лучше использовать pure php или компилируемые шаблоны типа Smarty или Twig.
 

tony2001

TeaM PHPClub
Было выяснено, что неустранимый косяк блитца в том, что он экстеншн. Если точно, это косяк не самого блитца, а комбинации самого пхп и экстеншена в самом механизме переключения контекста. Если сделать патч к пхп и встроить код блитца как нативные функции - исчезнет корень проблемы, он опять будет применим.

Если ты утверждаешь, что у тебя блитц летает, это значит:
- за 2 года пхп чудесным образом вылечился и экстеншены можно применять эффективно
Ух ты ж ёшкин кот, какая чудесная глупость.
"Нативные функции" и "экстеншен" - это одно и то же. До последнего байта. Всё написано на C, всё вызывается совершенно одинаково.
Единственное возможное различие в данном случае - это как грузится экстеншен: статически (вкомпилён в бинарник PHP) или динамически (blitz.so). Но и это делается 1 (один) раз на процесс, поэтому никакого влияния не оказывает.

Это не мое исследование (автор может добавить деталей, я уже не помню). 2 года назад мы изучили тему.
Мопед не твой? Не размещай объяву!
 

atv

Новичок
Два вопроса по недошаблонизатору Blitz или наглядно о том, какие не должны быть шаблонизаторы
Глупость в купе с категоричностью - это полный писец, жуткая смесь...
 

fixxxer

К.О.
Партнер клуба
tony2001

подозреваю, что на самом деле там примерно в этом суть:

$ time php -r 'for($i=0;$i<1000000;$i++)htmlspecialchars("");'

real 0m0.392s
user 0m0.376s
sys 0m0.013s

$ time php -r 'for($i=0;$i<1000000;$i++)call_user_func("htmlspecialchars","");'

real 0m1.214s
user 0m1.196s
sys 0m0.013s
 

tony2001

TeaM PHPClub
Фикс, это другое. Он же говорит, что "сделать патч к пхп и встроить код блитца как нативные функции - исчезнет корень проблемы".
Функции блитца же не вызываются через call_user_func() потому, что они "не нативные", ага?
 

DiMA

php.spb.ru
Команда форума
Сам ты мопед. Я попробовал продукт, который по идее должен быть быстрый. Вызываю хелперы - все затормаживается. Да мне похер, как научно описывается проблема, она есть и о ней никто не заявил до этого. В ответ на озвучивание проблемы я вижу рвотные пакетики? Ты чего по существу сказать то хочешь, проблемы нет?

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