include в Smarty - зло или нет?

include в Smarty - зло?

  • Да - зло

    Голосов: 5 29,4%
  • Нет, профайлер врет

    Голосов: 11 64,7%
  • Отвечу в топике

    Голосов: 1 5,9%

  • Всего проголосовало
    17
  • Опрос закрыт .

confguru

ExAdmin
Команда форума
include в Smarty - зло или нет?

include в Smarty - зло или нет?

Сравнивал скорость работы zend профайлером

reg_lite - все в 1 шаблоне

reg_with_include - c 5 инклудами

Разница в 5.1 раза - см. вложение..
 

Вложения

magic

lancer
Не зло, а в некоторых случаях необходимость.

Хм. не заметил сразу картинку. А как тест делался? Что с кешированием?
 

confguru

ExAdmin
Команда форума
magic

Кстати акселератор на профилирование похоже не влияет..
это рулез..
Есть вещи которые не закешируешь :)
 

confguru

ExAdmin
Команда форума
magic

Ну сделай у себя шаблон из 1 файла и
из 5 инклудов - и проверь профайлером.
 

magic

lancer
Профайлер глюкнул. Вот тесты ab.
Все в одном
ab -n1000 -c10 http://localhost/_smarty_test.php

Server Software: Apache/2.0.54
Server Hostname: localhost
Server Port: 80

Document Path: /_smarty_test.php
Document Length: 11796 bytes

Concurrency Level: 10
Time taken for tests: 18.664 seconds
Complete requests: 1000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 12158000 bytes
HTML transferred: 11796000 bytes
Requests per second: 53.58 [#/sec] (mean)
Time per request: 186.64 [ms] (mean)
Time per request: 18.66 [ms] (mean, across all concurrent requests)
Transfer rate: 651.41 [Kbytes/sec] received

Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 16 170 799.7 76 14870
Waiting: 16 170 799.7 76 14870
Total: 16 170 799.7 76 14870

Percentage of the requests served within a certain time (ms)
50% 76
66% 146
75% 149
80% 153
90% 174
95% 186
98% 261
99% 993
100% 14870 (last request)
Пять инклудов
ab -n1000 -c10 http://localhost/_smarty_test2.php

Server Software: Apache/2.0.54
Server Hostname: localhost
Server Port: 80

Document Path: /_smarty_test2.php
Document Length: 12504 bytes

Concurrency Level: 10
Time taken for tests: 21.269 seconds
Complete requests: 1000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 12866000 bytes
HTML transferred: 12504000 bytes
Requests per second: 47.02 [#/sec] (mean)
Time per request: 212.69 [ms] (mean)
Time per request: 21.27 [ms] (mean, across all concurrent requests)
Transfer rate: 604.92 [Kbytes/sec] received

Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 12 42.0 0 306
Processing: 19 199 59.5 201 835
Waiting: 1 197 62.5 200 835
Total: 19 211 52.1 202 835

Percentage of the requests served within a certain time (ms)
50% 202
66% 209
75% 215
80% 220
90% 227
95% 312
98% 360
99% 402
100% 835 (last request)
Получается, что при прочих равных условиях один большой шаблон чуть быстрее чем один маленький шаблон с пятью включениями. При повторном запуске тестов значения соответственно 17.623 и 20.812 секунд.

PS. eAccelerator был включен.

P.P.S. Я думаю, что гораздо большего ускорения можно добиться если включить кеширование шаблонов, буферизацию вывода и gzip, а ускорение за счет больших шаблонов только добавит головной боли, если придется менять дизайн.
 

confguru

ExAdmin
Команда форума
А без акселератора, я же говорил - профайлер не юзает
акселератор если он включен.

И интересен сам профайлер, насколько он не врет.
 

Кухан

Новичок
Я использовал этот шаблон для вывода дерева. Т.е. include у меня вызывается десяток раз.

Результаты:

Старый добрый microtime:
без дерева: около 0,07
с деревом: около 0,08

Apache Benchmark
без дерева:
Код:
F:\Inet\Apache2\bin>ab -n1000 -c10 [url]http://localhost/lilprison/[/url]

Server Software:        Apache/2.0.55
Server Hostname:        localhost
Server Port:            80

Document Path:          /lilprison/
Document Length:        18222 bytes

Concurrency Level:      10
Time taken for tests:   [B]101.171875 seconds[/B]
Complete requests:      1000
Failed requests:        465
   (Connect: 0, Length: 465, Exceptions: 0)
Write errors:           0
Total transferred:      18650807 bytes
HTML transferred:       18184217 bytes
Requests per second:    9.88 [#/sec] (mean)
Time per request:       1011.719 [ms] (mean)
Time per request:       101.172 [ms] (mean, across all concurrent requests)
Transfer rate:          180.02 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   30  53.3     15     562
Processing:   359  968 205.5    953    1719
Waiting:      218  718 221.5    718    1562
Total:        390  999 206.2   1000    1843

Percentage of the requests served within a certain time (ms)
  50%   1000
  66%   1062
  75%   1109
  80%   1156
  90%   1265
  95%   1359
  98%   1500
  99%   1562
 100%   1843 (longest request)
с деревом:
Код:
F:\Inet\Apache2\bin>ab -n1000 -c10 [url]http://localhost/lilprison/[/url]

Server Software:        Apache/2.0.55
Server Hostname:        localhost
Server Port:            80

Document Path:          /lilprison/
Document Length:        20518 bytes

Concurrency Level:      10
Time taken for tests:   [B]111.875000 seconds[/B]
Complete requests:      1000
Failed requests:        417
   (Connect: 0, Length: 417, Exceptions: 0)
Write errors:           0
Total transferred:      20900924 bytes
HTML transferred:       20434744 bytes
Requests per second:    8.94 [#/sec] (mean)
Time per request:       1118.750 [ms] (mean)
Time per request:       111.875 [ms] (mean, across all concurrent requests)
Transfer rate:          182.44 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   43 109.2     31    3031
Processing:   140 1068 317.7   1047    4015
Waiting:      109  790 302.5    781    3734
Total:        140 1112 325.3   1093    4093

Percentage of the requests served within a certain time (ms)
  50%   1093
  66%   1140
  75%   1187
  80%   1218
  90%   1296
  95%   1421
  98%   1546
  99%   3515
 100%   4093 (longest request)
Zend профайлер
что-то у меня он сильно глючит, запускал несколько раз, из них половина показала отрицательное значение:)), а остальные значения с большим разбросом. А время выполнения файлов и функция, вообще прыгает как сумашедшее, такое ощущение, что он рандомно генерирует эти числа.

но если кому-то интересно, вот средние значения:
без дерева: около 170 мсек.
с деревом: около 240 мсек.

Итог: в общем я использую include и не парюсь насчет его быстродействия.
 

Кухан

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

Да и тестривол на своем домашнем компе, где запущено куча приложений.
 

clops

Новичок
не думаю что это очень разумно — использовать инклюд для вывода частей каталога
 

Ripley

Новичок
Бывает такой дизайн, такая верстка, такой кодинг, что в нем не найдешь даже каких-либо переменных :)

При написании - разбивать все на мелкое - удобно. Посему не зло, для меня по крайней мере.

А вот сдавать заказ можно и убрав инклюды (если таковое возможно). Энкодинг :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Инклюды действительно тормозят.
Но у меня это очень редко является узким местом.
У меня почти всегда 2 инклюда - header и footer. Не использовать их - терять неколько дней, что никому не нужно.

Я часто делаю корневую (самую нагруженную) страницу без инклюдов, остальные - с ними.
 

confguru

ExAdmin
Команда форума
grigori

Значит я был прав :)
Был написан скрипт, который обходил шаблоны и склеивал
если встречал include, скорость увеличилась с 300-350 до 170-190мс
 

crocodile2u

http://vbolshov.org.ru
admin
Именно так обращается с инклюдами и wrap'ами обращается при "компиляции" WACT.
 
Сверху