Jump to content

Почему Smarty такой медленный?


Recommended Posts

Вот собственно вывод дебагера:

Load time: 27.702s
You'd better run your shop on a toaster
config: 263ms
constructor: 0ms
init: 74ms
checkAccess: 0ms
setMedia: 9ms
postProcess: 0ms
initHeader: 5ms
initContent: 7.614s
initFooter: 1ms
display: 19.738s

И в тоже время тот кусок кода в смарти который так тормозит:

 {foreach $attributes as $id=>$attribute}
                <tr>
                    <td>
                        <h3>{$attribute.name}</h3>
                        <ul>
                            {foreach $attribute.values as $value}
                                <li><input type="checkbox" name="a[{$id}]" value="{$value}">{$value}</li>
                            {/foreach}
                        </ul>
                    </td>
                </tr>
            {/foreach}
 
Родительский массив 3 элемента. Дочерних по несколько десятков. Но я все-таки не понимаю из-за чего столь долгое время идет на построение шаблона. Использую Smarty 3 на других проектах, вместе с фреймворками, естественно на этапе разработки кеширование представлений отключаю, но и таким образом оно на много производительнее. Кто разбирался, может подскажете суть? Ну если сам докопаюсь то отпишусь.

 

Link to comment
Share on other sites

Ты тролишь что ли со своими 27 секундами? а потом еще напишешь что ты это все на денвере проверял еще?

 

У страница с 300+ категориями, с 15 тысячами товаров и фильтром blocklayered по 5ти параметрам грузится за 450мс....правда с 1 посетителем..

Edited by Kerm (see edit history)
Link to comment
Share on other sites

Эм... Проверял я это на связке Nginx+Php-fpm+memcached вообще-то, на локалхосте под Debian GNU\Linux, с 3 ГБ ОЗУ из которых у PHP лимит в 512. Вся суть в том что мне нужно динамически формировать список фильтров по аттрибутам, а не выбирать в админке. И суть в другом, без цикла что я написал выше, но с выборкой всех нужных данных из базы панель отладки показывает такие результаты:

Load time: 2.631s
You'd better run your shop on a toaster
config: 86ms
constructor: 0ms
init: 28ms
checkAccess: 0ms
setMedia: 2ms
postProcess: 0ms
initHeader: 1ms
initContent: 1.976s
initFooter: 0ms
display: 537ms

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

Load time: 15.179s
You'd better run your shop on a toaster
config: 74ms
constructor: 0ms
init: 33ms
checkAccess: 0ms
setMedia: 3ms
postProcess: 0ms
initHeader: 1ms
initContent: 2.044s
initFooter: 1ms
display: 13.022s

Уважаемый, мне как бы не до тролинга. У меня тут таки реальная пробелмка. Вот смотрю куда копать. Думал может кто сталкивался уже или где я чего не так сделал(хотя что удивительного в таком цикле? O_o)

 

К слову версия престы 1.5.5

Edited by Nelexis (see edit history)
Link to comment
Share on other sites

Вы пытаетесь нагрузить смарти несвойственным ему занятием — php. Между тем, смарти это всего лишь обработчик того, что передает ему пхп. Именно в пхп и должен работать ваш foreach, а не где-нибудь еще.

  • Like 1
Link to comment
Share on other sites

Вы пытаетесь нагрузить смарти несвойственным ему занятием — php. Между тем, смарти это всего лишь обработчик того, что передает ему пхп. Именно в пхп и должен работать ваш foreach, а не где-нибудь еще.

Да, Вы правы, что-то закралось у меня такое неправильное ощущение что smarty работает с той же скоростью что и php. Хотя там был уже сформированный массив, смарти нужно было лишь все это в цикле вывести. Так же нашел ошибку в собственном SQL запросе, из-за чего получал массив намного больше чем должен был. Моя невнимательность. В итоге без кеширования с фильтрами все страницы грузятся не более чем за 2 секунды. Вопрос исчерпан. =)

Link to comment
Share on other sites

Да, Вы правы, что-то закралось у меня такое неправильное ощущение что smarty работает с той же скоростью что и php. Хотя там был уже сформированный массив, смарти нужно было лишь все это в цикле вывести. Так же нашел ошибку в собственном SQL запросе, из-за чего получал массив намного больше чем должен был. Моя невнимательность. В итоге без кеширования с фильтрами все страницы грузятся не более чем за 2 секунды. Вопрос исчерпан. =)

2 секунды это всёравно многовато...

Link to comment
Share on other sites

Да, многовато. Это без кеширования и с постоянной перекомпиляцией шаблонов. С кешированием еще не проверял. Но в любом случае еще есть над чем работать.

  • Like 1
Link to comment
Share on other sites

×
×
  • Create New...