Sergeich |
|
---|---|
Хорошо, бум пробовать, но слегонца пугают меня непрограмёра такие конструкции :)
|
dervan |
|
---|---|
# medar : Да, я тоже хотел сделать ссылкой, но меня насторожил код ниже:Это ссылка в $GLOBALS на самого себя - она там ещё с PHP3, когда ещё в языке ссылки не поддерживались. Проверка - чтобы не зацикливаться при копировании. Про этот хак в XTemplate подробно рассказано здесь. |
Dayver |
|
---|---|
Афигенно.... если все работает, и без глюков да еще и без тормозов то на днях таки активизирую свою работу по устранению xhtml кода из админских php файлов(если данная фича будет закомичена в транк).....а как покончу с админкой(почти половину уже осилил) и дефолтными плугами(а там остался всего то один плуг поиска) возьмусь за остальные части папочки systems
Pavlo Tkachenko aka Dayver
|
medar |
|
---|---|
Проапдейтил файл с учетом изменений от dervan.
Бенчмарк на локалхосте, php под виндой. ab -c 4 -n1000 "http://localhost/svn.cotonti.com/trunk/page.php?id=2" Новый xtemplate, два логических блока в tpl. Requests per second: 8.48 [#/sec] (mean) Time per request: 471.563 [ms] (mean) Time per request: 117.891 [ms] (mean, across all concurrent requests) Transfer rate: 64.49 [Kbytes/sec] received Новый xtemplate, без логических блоков. Requests per second: 8.81 [#/sec] (mean) Time per request: 454.188 [ms] (mean) Time per request: 113.547 [ms] (mean, across all concurrent requests) Transfer rate: 66.25 [Kbytes/sec] received Разницы практически нет, ок. Теперь старый xtemplate Requests per second: 13.06 [#/sec] (mean) Time per request: 306.188 [ms] (mean) Time per request: 76.547 [ms] (mean, across all concurrent requests) Transfer rate: 99.96 [Kbytes/sec] received Результат, мягко говоря, обескураживает. Старый более чем в полтора раза быстрее. Начал разбираться в чем дело. Новый xtemplate, но со старой функцией scan_globals() (без хака dervan) Requests per second: 9.41 [#/sec] (mean) Time per request: 424.875 [ms] (mean) Time per request: 106.219 [ms] (mean, across all concurrent requests) Transfer rate: 70.83 [Kbytes/sec] received Кто-нибудь может прокомментировать, что происходит ? :) Как-то это всё нелогично.. Надо проштудировать хабр, вроде бы кто-то уже сталкивался с подобной ситуацией. rangjungyeshe.ru
|
|
This post was edited by medar (2009-03-09 20:36, 15 years ago) |
dervan |
|
---|---|
# medar : Кто-нибудь может прокомментировать, что происходит ? :) Как-то это всё нелогично..Получается, что по ссылке на $GLOBALS парсинг работает дольше, чем при использовании локальной копии. ================ medar, я извиняюсь - не пойдёт этот хак scan_globals(). Во-первых, я не учёл, что после такой переделки весь $GLOBALS можно убить методом assign(), например так:
$t->assign('PHP', 'test_assign');
$t->assign(array('PHP' => 'test_assign_array'));
Добавлял в конец system/header.php такой код, всё так и есть - $GLOBALS уничтожается:
$t->assign('PHP', 'test_assign');
$t->parse("HEADER");
$t->out("HEADER");
echo '<pre>', strip_tags(print_r($GLOBALS, true)), '</pre>';
В принципе, можно в методе assign() проверять ключ на значение 'PHP' и не присваивать в этом случае значение. Но $GLOBALS всё равно можно убить напрямую через vars:
$t->vars['PHP'] = 'test_assign';
К тому же есть нюансы при работе метода parse(). Например, такой код в конце system/header.php, плюс тег {PHP.TEST_DEFINE) в header.tpl:
define('TEST_DEFINE', 'test_define');
$TEST_DEFINE = '';
$t->parse("HEADER");
$t->out("HEADER");
echo $TEST_DEFINE, '<br />';
И вдобавок по твоим тестам с переделанным scan_globals() парсер работает медленнее. Так что в сад. :) Ещё раз извиняюсь. |
medar |
|
---|---|
UPD
Провел тестирование на линуксовом серваке. Цифры стали логичными и предсказуемыми. Все-таки php под виндой - это странная вещь. :) Старый xtemplate Requests per second: 16.30 [#/sec] (mean) Time per request: 245.377 [ms] (mean) Time per request: 61.344 [ms] (mean, across all concurrent requests) Transfer rate: 123.87 [Kbytes/sec] received Новый xtemplate + хак dervan (здесь и далее) шаблон без логики Requests per second: 17.47 [#/sec] (mean) Time per request: 229.007 [ms] (mean) Time per request: 57.252 [ms] (mean, across all concurrent requests) Transfer rate: 132.60 [Kbytes/sec] received Новый xtemplate, шаблон с логикой, 1 условие Requests per second: 16.78 [#/sec] (mean) Time per request: 238.446 [ms] (mean) Time per request: 59.611 [ms] (mean, across all concurrent requests) Transfer rate: 128.34 [Kbytes/sec] received Новый xtemplate, шаблон с логикой, 25 условий Requests per second: 15.60 [#/sec] (mean) Time per request: 256.485 [ms] (mean) Time per request: 64.121 [ms] (mean, across all concurrent requests) Transfer rate: 119.25 [Kbytes/sec] received rangjungyeshe.ru
|
Sergeich |
|
---|---|
надо под нагрузкой всё это потестить для чистоты совести. А заодно в английскую ветку выложить, чтобы и там народ потестировал, может что интересное предложат.
|
medar |
|
---|---|
dervan
Да, наверное, лучше убрать. Надо будет решить эту проблему по-другому - вообще отказаться от scan_globals(), а при парсинге тэгов {PHP.xxx} обращаться непосредственно к $GLOBALS. rangjungyeshe.ru
|
dervan |
|
---|---|
# medar : dervanТогда посыпятся плагины, которые используют $t->vars. |
Trustmaster |
|
---|---|
С чего бы? Через $t->vars обычно вытаскивают локальные переменные, к глобальным обращаются напрямую, иначе очень большая глупость получается.
ЗЫ: я тут глянул еще раз на код XTemplate. Возникает законный вопрос "неужели это всё хоть сколько-нибудь работоспособно" ![]() May the Source be with you!
|
medar |
|
---|---|
Вопрос, есть ли такие. Я верю в здравый смысл плагинописателей.
Если человек копался в коде и знает, что существует $t->vars, то он должен понимать, что брать оттуда данные, а не из например $cfg[] напрямую - это оперировать гланды через задницу. :)[/] rangjungyeshe.ru
|
dervan |
|
---|---|
Эта гипотеза. Всё то, что я перечислил как доводы против переделки scan_globals(), сам бы ни за что не стал делать - изврат на изврате. :)
|
Sergeich |
|
---|---|
ну так может посмотрим пристально на другие шаблонизаторы. Если всё так не здорово в нашем, то пока не поздно внедрить новый, правильный шаблонизатор :). Пока плагинов мало под кот - это можно будет сделать относительно безболеззненно. написать хороший скрипт миграции и вперёд :).
|
esclkm |
|
---|---|
раз уже на икстеплейте то на икстемплейте.
тем более что у нас появился специалист по xtemplate - поэтому возможно скоро мы увидим medarTemplate littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты |
medar |
|
---|---|
ну так может посмотрим пристально на другие шаблонизаторыне, проще обустроить xtemplate. Логику написали, теперь регулярки поправить внутри и все ок будет. rangjungyeshe.ru
|