den99 05 августа 2013 1 23
Итак, рванём с места сразу в космос.
Речь пойдет о modx revo, тормозных чанках, сниппетах и жутком парсере. Всё действие относится так же и к debian 6.

1. Проверьте текущую версию php на сервере.
2. Если она НИЖЕ ЧЕМ 5.4.17, вам поможет только modxSmarty Философа.
3. Обновите версию ровно до 5.4.17
4. Наслаждайтесь ускоренной работой чанков, сниппетов и парсера. Достигнутое ускорение лично мной — около 40%.

Как это работает?
1. Modx Revo и деятельность его парсера сильно основана на циклах.
2. PHP версий ниже очень плохо дружит с циклами, что теперь оптимизировано (привет оптимизаторам!) и самый сок на текущий день — в версии 5.4.17.
Что любопытно, версия 5.5.1 преднаначенная для Debian 7 работает МЕДЛЕННЕЕ на том же debian 6 (не выяснял почему).

Что теперь имеем?
1. Сайт с кучей тегов, сниппетами, фотками (еще пока phpthumbOF), getresources, getpage и прочий, казалось бы, хлам, теперь работает заметно быстрее, да так заметно, что почти как на modxcloud!
2. Можно не ждать год до смены парсера.

Выводы: обновляйтесь немедленно.

Как это сделать на Debian 6?

Добавляем в /etc/apt/resouces.list:

deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all
deb http://packages.dotdeb.org squeeze-php54 all
deb-src http://packages.dotdeb.org squeeze-php54 all


Вбиваем это в командной строке:
gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | apt-key add -


Видим ОК? ОК.

apt-get update
apt-get upgrade

apt-get install php5-cgi php5-cli


Ждём установки.

Проверяем:
php -v


Видим:
PHP 5.4.17-1~dotdeb.0 (cli) (built: Jul 6 2013 17:53:27)
Copyright © 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright © 1998-2013 Zend Technologies

Добавьте по вкусу xcache или apc, например:
apt-get install php5-apc


И АЛЛИЛУЯ!
23 комментария
Fi1osof1
Fi1osof 05 августа 2013г в 19:15 #
Спасибо за отличную заметку!
den991
den99 05 августа 2013г в 19:30 #
Потрясающе даже то, что проклятый на днях мною Quip также работает намного быстрее. И весь фокус — в циклах. НЕ В дисковых операциях!
Стоит знать, что без Quip, но с твоим modxsmarty и с modxtemplate и хорошим phpкешером — сайт становится настоящим сверхсветовым межпланетным двигателем и на довольно слабых серверных ресурсах.

Я тестировал эти штуки на трех разных серверах. От виртуала на 1 ядро/1.7Ghz с 512 мегами, до 8 ядерного железа CoreI7 c 24 гигами памяти (и это УЖЕ явный избыток).
Fi1osof1
Fi1osof 05 августа 2013г в 20:13 #
Так а про дисковые операции вообще никто ничего не говорил. Дело именно в работе парсера. То есть большая часть всего, что связано с чанками и сниппетами — это все закешировано движком, и с этим особых вопросов нет. А вот про огромное количество цикловых операций и работу со строками разговоров было много, и очень хорошие исследования на счет этого были опубликованы Agel_Nash-ем.
den991
den99 05 августа 2013г в 20:28 #
я заикнулся про дисковые потому, что замечал как при нехватке памяти всё упирается в своп несущей ноды на VDS, и, как следует, кеш — это файлы. Причем мелкие и дофига их. И где они лежат? На диске.
Замерив даже примерно каждую операцию можно понять сколько там всего на это уходит, с учетом диких оверселов конечно.
Только поэтому я заикнулся насчет дисков, ничего более, я просто грешил на дисковое узкое звено самих серверных систем, а не modx
Последние тесты показывают, что диски — узкое место. Но к modx лично отношения мало имеют, разве что только кешируя файлами.
Fi1osof1
Fi1osof 05 августа 2013г в 21:06 #
Ну, в этом тоже не поспоришь.
den991
den99 06 августа 2013г в 08:36 #
Для перелинковки и для сохранения последовательности. Ссылка на вторую часть: modxclub.ru/blog/sandbox/176.html
vgrish1
vgrish 20 августа 2013г в 20:25 #
прочел, поставил 5.4.17 — да скорость хорошая!
сейчас ради прикола воткнул вот эту:
PHP 5.4.9-4ubuntu2.2 (cli) (built: Jul 15 2013 18:24:39)
Copyright © 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright © 1998-2012 Zend Technologies

ну и как бы скорость та же самая — все быстро как и раньше!)
den991
den99 22 августа 2013г в 12:55 #
Это «ускорение» появилось в версии 5.4, поэтому теоретически должно работать с 5.4.x и до скончания веков. Однако в версии 5.5, похоже, опять производительность несколько падает, вероятно потому, что 5.5 я ставил на Debian 6, вместо предназначенного Debian 7. Но это уже не важно.
vgrish1
vgrish 22 августа 2013г в 21:16 #
Возможно вы мне подскажете, уже три дня мучает вопроc:
проделываю следующую штуку — вызываю пустую страницу с шаблоном blank некешируемую
1й вызов — 0.1 секунда, 2й и следующие (60с)- 0.04секунды
это шаред на timeweb.

проделываю тот же фокус на vps
1й вызов — 0.08 секунда, 2й и следующие — 0.08секунды

вопрос — что так на шареде кеширует вызов? ведь страничка то некешируемая, но код каким то образом кешируется и отдается очень быстро!
на vps пробовал ставил различные акселераторы, но такого эффекта добиться не смог!

будьте добры подскажите в чем дело. Мне это покоя не дает)
Fi1osof1
Fi1osof 22 августа 2013г в 22:44 #
Немного вклинюсь: не забывайте, что MODX по умолчанию в БД хранит сессии. А на уровне мускула тоже есть кеширование. Может на шареде кеш мускула более продолжительный выставлен.
Второе: VPS-ка — это виртуальная урезанная штука только со своими ресурсами (хотя Ден рассказывал про несколько вариантов виртуализации). А у шареда ресурсы общие, при этом это очень внушительные ресурсы, и если никакой сайт не напрягает серьезно сервер, то он в состоянии выдавать очень большие производственные показатели. Расчет же на то, что не будет длительных нагрузок в единицу времени. Так что многие задачи на таймвебе всегда выполнялись быстрее, чем на любом облачном хосте, с которым мне приходилось иметь дело.
vgrish1
vgrish 22 августа 2013г в 23:33 #
ну быстрый результат только в течении определенного времени действует… так что это полюбому кеш…
а вот про мускул то я не подумал...) возможно дело действительно в нем. Нужно будет проверить… спасибо за наводку!
Fi1osof1
Fi1osof 22 августа 2013г в 23:51 #
не за что.
vgrish1
vgrish 23 августа 2013г в 09:56 #
пробовал кеширование mysql, оно не дало такой прирост обработки(((
есди

mysql> show global status like 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 14       |
| Qcache_free_memory      | 16535408 |
| Qcache_hits             | 1696     |
| Qcache_inserts          | 195      |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 1        |
| Qcache_queries_in_cache | 115      |
| Qcache_total_blocks     | 280      |
+-------------------------+----------+
как понять эффективен кеш или нет?
Fi1osof1
Fi1osof 23 августа 2013г в 10:39 #
С этим не подскажу, это уже тонкости настройки.
nigmati1
nigmati 03 октября 2013г в 17:08 #
Здорово, помогло на 100%! Спасибо
Fi1osof1
Fi1osof 03 октября 2013г в 17:51 #
Вы еще следующую статью прочитайте: modxclub.ru/blog/research/176.html
Переводите на phpTemplates+modxSmarty и вот тогда ощутите реальный прирост в производительности.
nigmati1
nigmati 03 октября 2013г в 19:16 #
Да я уже как раз этим и занят. Пробую на дохлом сайте
Fi1osof1
Fi1osof 03 октября 2013г в 19:34 #
В целом процедура совсем не сложная.
1. Устанавливаете phpTemplates+modxSmarty.
2. Код из MODX-шаблонов переносите как есть в Smarty-шаблоны.
3. Создаете php-контроллер для статических MODX-шаблонов. Лучше всего использовать вот этот код: gist.github.com/Fi1osof/6023918
4. MODX-шаблоны делаете статическими и всем им устанавливаете этот единый php-контроллер. В самих шаблонах создаете настройку tpl и указываете индивидуальные названия Smarty-шаблонов.
5. Когда все заработает, меняете кешируемые MODX-теги на их Smarty-аналоги {chunk}, {snippet}, {config} и т.п.

P.S. Лучше всего, если Смарти-шаблоны будут расширением единого layout-шаблона. Тогда код будет более управляемым. Можете развернуть у себя сборку ShopModxBox и посмотреть как все это там работает.
n
nirfrost 24 ноября 2013г в 20:45 #
Добрый вечер есть пару вопросов
1 часто использую сниппет ClientConfig так сказать выношу все левые поля типо телефон компании тд для удобного редактирования
он имеет плейхождео для вывода
так вот как же его вывести синтаксисом smarty если к примеру это поле выводить картинку и ее к тому же надо ее еще и обрезать с помощью phpthumbof
вот на форуме нашол примерно то что надо но это не совсем то так сказать
так как тут tv выводиться

<img src="{snippet name=«phpthumbof» params=«input=`{$object.image}`&options=`h=130&w=200`»}" />

2 есть такая проверка на значение tv поля на да или нет

`:else=``

как эту запись также перевести на php или smarty?

подскажите будьте добры
Fi1osof1
Fi1osof 24 ноября 2013г в 23:23 #
Самое главное: вам в помощь будет в принципе знание php, поэтому если в знаниях php есть серьезные пробелы, то надо восполнять это, иначе просто никак.

1 часто использую сниппет ClientConfig так сказать выношу все левые поля типо телефон компании тд для удобного редактирования
он имеет плейхождео для вывода
1. Нет никаких проблем вызывать сниппет в Смарти, типа {snippet name=«ClientConfig» params=""}.
2. Если сам сниппет не возвращает результат, а просто набивает данные в плейсхолдеры, есть тег {ph name=$placeholder_name}. Все имеющиеся плагины-теги: github.com/Fi1osof/modxSmarty/tree/master/core/components/modxsmarty/smarty_plugins
Вставляйте дальше по коду везде, где хочется. Только вот нельзя в таком виде их использовать, если у вас сниппет ClientConfig вызвается как обычный сниппет [[!ClientConfig]], ибо в таком случае его реальная обработка будет выполнена MODX только в самом конце парсинга, и на момент Smarty-тегов просто не будет этих плейсхолдеров.

2 есть такая проверка на значение tv поля на да или нет
`:else=``
как эту запись также перевести на php или smarty?

{field name=$tv_name assign=myparam}
{if $myparam}
    {$myparam}
{/if}
n
nirfrost 25 ноября 2013г в 09:39 #
Спасибо большое за помощь!
Fi1osof1
Fi1osof 25 ноября 2013г в 09:50 #
Пожалуйста!
proxies1
proxies 11 марта 2014г в 14:45 #
Обновил как вы посоветовали, и почему то получил PHP Version 5.4.26-1~dotdeb.0
Хотелось бы уточнить, почему именно dotdeb, многие его не любят этот репозиторий, там корявые сборки модулей, и не всегда оптимизированы под конкретные задачи.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.