doggy00@inbox.ru
5 авг. 2013 г., 14:53

Ускорение чанков или новая жизнь старого сайта на modx revo

Итак, рванём с места сразу в космос. Речь пойдет о 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
И АЛЛИЛУЯ!
Спасибо за отличную заметку!
Потрясающе даже то, что проклятый на днях мною Quip также работает намного быстрее. И весь фокус — в циклах. НЕ В дисковых операциях! Стоит знать, что без Quip, но с твоим modxsmarty и с modxtemplate и хорошим phpкешером — сайт становится настоящим сверхсветовым межпланетным двигателем и на довольно слабых серверных ресурсах.
Я тестировал эти штуки на трех разных серверах. От виртуала на 1 ядро/1.7Ghz с 512 мегами, до 8 ядерного железа CoreI7 c 24 гигами памяти (и это УЖЕ явный избыток).
Так а про дисковые операции вообще никто ничего не говорил. Дело именно в работе парсера. То есть большая часть всего, что связано с чанками и сниппетами — это все закешировано движком, и с этим особых вопросов нет. А вот про огромное количество цикловых операций и работу со строками разговоров было много, и очень хорошие исследования на счет этого были опубликованы Agel_Nash-ем.
я заикнулся про дисковые потому, что замечал как при нехватке памяти всё упирается в своп несущей ноды на VDS, и, как следует, кеш — это файлы. Причем мелкие и дофига их. И где они лежат? На диске. Замерив даже примерно каждую операцию можно понять сколько там всего на это уходит, с учетом диких оверселов конечно. Только поэтому я заикнулся насчет дисков, ничего более, я просто грешил на дисковое узкое звено самих серверных систем, а не modx Последние тесты показывают, что диски — узкое место. Но к modx лично отношения мало имеют, разве что только кешируя файлами.
Ну, в этом тоже не поспоришь.
Для перелинковки и для сохранения последовательности. Ссылка на вторую часть: modxclub.ru/blog/sandbox/176.html
прочел, поставил 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
ну и как бы скорость та же самая — все быстро как и раньше!)
Это «ускорение» появилось в версии 5.4, поэтому теоретически должно работать с 5.4.x и до скончания веков. Однако в версии 5.5, похоже, опять производительность несколько падает, вероятно потому, что 5.5 я ставил на Debian 6, вместо предназначенного Debian 7. Но это уже не важно.
Возможно вы мне подскажете, уже три дня мучает вопроc: проделываю следующую штуку — вызываю пустую страницу с шаблоном blank некешируемую 1й вызов — 0.1 секунда, 2й и следующие (60с)- 0.04секунды это шаред на timeweb.
проделываю тот же фокус на vps 1й вызов — 0.08 секунда, 2й и следующие — 0.08секунды
вопрос — что так на шареде кеширует вызов? ведь страничка то некешируемая, но код каким то образом кешируется и отдается очень быстро! на vps пробовал ставил различные акселераторы, но такого эффекта добиться не смог!
будьте добры подскажите в чем дело. Мне это покоя не дает)
Немного вклинюсь: не забывайте, что MODX по умолчанию в БД хранит сессии. А на уровне мускула тоже есть кеширование. Может на шареде кеш мускула более продолжительный выставлен. Второе: VPS-ка — это виртуальная урезанная штука только со своими ресурсами (хотя Ден рассказывал про несколько вариантов виртуализации). А у шареда ресурсы общие, при этом это очень внушительные ресурсы, и если никакой сайт не напрягает серьезно сервер, то он в состоянии выдавать очень большие производственные показатели. Расчет же на то, что не будет длительных нагрузок в единицу времени. Так что многие задачи на таймвебе всегда выполнялись быстрее, чем на любом облачном хосте, с которым мне приходилось иметь дело.
ну быстрый результат только в течении определенного времени действует… так что это полюбому кеш… а вот про мускул то я не подумал...) возможно дело действительно в нем. Нужно будет проверить… спасибо за наводку!
пробовал кеширование 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 | +-------------------------+----------+
как понять эффективен кеш или нет?
С этим не подскажу, это уже тонкости настройки.
Здорово, помогло на 100%! Спасибо
Вы еще следующую статью прочитайте: modxclub.ru/blog/research/176.html Переводите на phpTemplates+modxSmarty и вот тогда ощутите реальный прирост в производительности.
Да я уже как раз этим и занят. Пробую на дохлом сайте
В целом процедура совсем не сложная. 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 и посмотреть как все это там работает.
Добрый вечер есть пару вопросов 1 часто использую сниппет ClientConfig так сказать выношу все левые поля типо телефон компании тд для удобного редактирования он имеет плейхождео для вывода так вот как же его вывести синтаксисом smarty если к примеру это поле выводить картинку и ее к тому же надо ее еще и обрезать с помощью phpthumbof вот на форуме нашол примерно то что надо но это не совсем то так сказать так как тут tv выводиться
<img src="{snippet name=«phpthumbof» params=«input=`{$object.image}`&options=`h=130&w=200`»}" />
2 есть такая проверка на значение tv поля на да или нет
`:else=``
как эту запись также перевести на php или smarty?
подскажите будьте добры
Самое главное: вам в помощь будет в принципе знание 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}
Спасибо большое за помощь!
Обновил как вы посоветовали, и почему то получил PHP Version 5.4.26-1~dotdeb.0 Хотелось бы уточнить, почему именно dotdeb, многие его не любят этот репозиторий, там корявые сборки модулей, и не всегда оптимизированы под конкретные задачи.

Добавить комментарий