http://modxclub.ru/uploads/images/00/01/66/2013/08/06/75d4c5.jpg После этого поста мы получим мгновенный сайт для всех и очень быстрый для привилегированных. :-) Вот вам заманушка из свежего эксперимента: 1. БЕЗ SMARTY, БЕЗ phpTemplates, сплошные ТЕГИ, ЧАНКИ, СНИППЕТЫ везде и всюду: ------> 0,6-4,8 sec (разброс большой), установлены getCache и CacheAccelerator.

  1. СО SMARTY, с phpTemplates И БЕЗ ТЕГОВ (с парочкой чанков и с десятком сниппетов, мне лень просто их менять): ------> 0,36-0,45 sec (стабильно на статике и динамике)

  2. СО SMARTY, с phpTemplates, БЕЗ ТЕГОВ (с парочкой чанков и с десятком сниппетов), А ТАКЖЕ С xFPC: ------> статика: 0,0 sec (засечь невозможно, почти html), серверные мониторы показывают 0,01 сек. ------> динамика стабильна: 0,34-0,39 sec ОГОВОРКИ: 1. PHP на сервере проверяем и настраиваем по этой ссылке: https://modxclub.ru/blog/research/175.html Что даёт серверную производительность даже на старом сайте, который был написан ламерами как я.

  3. Предполагается, что вы знаете или хотите узнать как работает phpTemplate и modxSmarty самостоятельно, изучая данный сайт, видео автора модулей и справку по Smarty. Что имеем в начале: 1. Боевой сайт. Железный сервер вытягивает любой хлам, но уже не всегда быстро как хотелось бы. а) Тяжелая морда. б) Всюду теги, чанки, вложенные чанки, линки в стиле [[~[[*id]]]] в) Ламерская оптимизация, а точнее — никакой. г) Куча getPage, getResources с глубиной поиска до 10 каталогов, с where и с фильтрами, которые к тому же еще и сами чанки. д) Вообщем гамна набралось на всю ночь разбираться. Что хотим? 1. Сайт со скоростями HTML. В том числе и в динамике.

  4. Разгрузку сервера до состояния «пора покупать дешевый хостинг за 1$ в год». Что делаем? Делаем много, запаситесь временем, терпением и резервными копиями сайта-пациента. Кратко:

  5. Уберем нагрузку с обработки графики таким образом, чтобы она обрабатывалась в другом потоке.

  6. Уйдем от MODX-парсера максимально далеко.

  7. Научимся новым вещам и решениям.

  8. Закешируем всё так, что быстрее будет только HTML. ПОЕХАЛИ 1. Ставим для обработки графики phpThumbsUp      а) Открываем сниппет phpThumbOF(OF!!) и вставляем внутрь(!) его КОД сниппета phpThumbsUp. Убили много зайцев сразу и не надо ковырять сотню чанков. Минусы не стоят того, чтобы заботиться о них.      б) в настройках системы находим phpThumbsUp и ставим так (делай как я): http://modxclub.ru/uploads/images/00/01/66/2013/08/06/51cab6.jpg в) Я также побыстрому избавился от RezImgCrop, сунув в его тело такой скрипт: $serve = $modx->getOption('base_path');

$output = trim($input); $opt = explode(',',$options);

if (count($opt) >= 1) { $crop = $opt[1]; $croparr = explode('x',trim($crop,'c-')); $cropw = $croparr[0]; $croph = $croparr[1];

} else { $crop = $opt[0]; $croparr = explode('x',trim($crop,'c-')); $cropw = $croparr[0]; $croph = $croparr[1]; }

return ('/thumb/w/'.$cropw.'/h/'.$croph.'/zc/1/f/jpeg/q/94/src/'.$input); // дурная практика, знаю 2. Ставим ModxSmarty и phpTemplates      а) Разбираемся как это работает и пользуемся этим сайтом чтобы найти ответы. В том числе этот коммент. А также тут и тут. 3. Сообразив по пункту 2 что нас ждёт жаркое время, приступаем к сайту:      а) Создаем новый шаблон, назовем его, например main_new.      б) Вбиваем в него примерно такое: <?php $output = $modx->smarty->fetch('header.tpl'); $output .= $modx->smarty->fetch('inside.tpl'); $output .= $modx->smarty->fetch('footer.tpl'); return $output; ?> в) Сохраняем этот новый шаблон! ЗАМЕТКА ПО ХОДУ: Я сделал шаблон статичным, как файл (изучайте справку по этим модулям), и положил его в /assets/templates/ с именем main.php 4. Теперь находим нашу главную страницу (ресурс) и копируем её с названием, например «Копия главной».      а) Этой копии ставим тип ресурса «Документ с PHP-шаблоном» (проверено, так быстрее). Вот как тут: http://modxclub.ru/uploads/images/00/01/66/2013/08/06/0aa620.jpg б) Назначаем ей только что созданный шаблон main_new      в) Ставим этой копии «Опубликовано» (пригодится ниже)      г) Сохраняем копию документа. ЗАМЕТКА ПО ХОДУ: Уже имеем шаблон + документ. 4. Далее всё по инструкции по использованию Smarty, создаем шаблоны в каталоге /assets/templates/default (все подробности есть в документации по модулям), в нашем примере вот с такими именами: $output = $modx->smarty->fetch('header.tpl'); $output .= $modx->smarty->fetch('inside.tpl'); $output .= $modx->smarty->fetch('footer.tpl'); 5. Теперь делаем так: а) Открываем СТАРЫЙ ШАБЛОН, который назначен главной странице боевого сайта. Б) Переносим этот MODX-format шаблон в… в блокнот! В) Создаем файлы шаблона smarty, как указано выше. Г) Копируя частями из блокнота, деля его на header (почти всегда одинаковый у всех страниц сайта), inside (тут динамика) и footer (тут тоже почти всегда статика), наполняем эти три вышеуказанных файла. ЗАМЕТКА: Мы уже имеем файлы для будущего шаблона. Д. КОНВЕРТИРУЕМ ручками старый MODX-format шаблон в SMARTY-формат (во всех трех файлах). ВАЖНО: Будьте предельно внимательны, любая мелочь приведет к тому, что шаблон не заработает! Например: {link id="55"} выглядит правильно, но если он обрамлён еще в одни кавычки вот так: a href="{link id="55"}" то нифига не заработает. Поправьте такие детали, например так (разные кавычки): a href='{link id="55"}' Стоит заметить, что из равновесия может вывести даже такая штука: a href='{link id="55" }' Нашли тут ошибку? Если не нашли, то вас ждёт по-строковая проверка шаблонов, но это тоже полезно (я же так и прошел :-). 6. Проверяем всё это упорно, пока у нас не отразится эта страница. Я применял как раз по-файлово-по-строчную проверку, где главным моим другом был… опять блокнот. 7. Доводим всё это до результата. Шаг за шагом — это для нас, для ламеров, а умные профи могут сделать сразу. 8. Получив таки первый приятный результат, подрубаем плагин xFPC и проверяем в настройках: http://modxclub.ru/uploads/images/00/01/66/2013/08/06/ba582e.jpg 9. Сбрасываем кеш сайта и запускаем браузер, в котором мы ТОЧНО разлогинены! 10. Заходим на эту нашу страницу этим браузером и видим страницу. 11. Перегружаем страницу, тыкнув F5. 12. Фантастика, разве нет? Страница второй раз загрузится почти мгновенно. 13. Жмем еще раз 20 F5, чтобы убедиться, что страница грузится мгновенно, ну или почти мгновенно. 14. 13 пунктов нельзя, поэтому этим пунктом идём за пивом. ВАЖНО ПОНЯТЬ: Для гостей будет отдаваться практически статичный html, что в большинстве случаев и требуется. Кроме того, никто не мешает применять Ajax и короткие интервалы кеширования плагина, а также любые другие подходы, включая серверные решения и даже cron. ВАЖНО: Для залогиненного юзера скорость будет ниже, так как каждый раз будет выполняться шаблон на PHP, однако скорость его будет в разы быстрее и появится плавность работы. Также будет вся (относительно вся) динамика. ПРИМЕЧАНИЕ: Разумеется, что это грааль не само совершенство, однако это может превратить сайт из полного тупого тормоза в стремительную ракету, да так, что обзавидуются все. Для гостей и ботов сайт пойдет почти как HTML. Теперь повторение моих результатов (чтобы не пришлось мотать наверх): 1. БЕЗ SMARTY, БЕЗ phpTemplates, сплошные ТЕГИ, ЧАНКИ, СНИППЕТЫ везде и всюду: ------> 0,6-4,8 sec (разброс большой), установлены getCache и CacheAccelerator.

  1. СО SMARTY, с phpTemplates И БЕЗ ТЕГОВ (с парочкой чанков и с десятком сниппетов, мне лень просто их менять): ------> 0,36-0,45 sec (стабильно на статике и динамике)

  2. СО SMARTY, с phpTemplates, БЕЗ ТЕГОВ (с парочкой чанков и с десятком сниппетов), А ТАКЖЕ С xFPC: ------> статика: 0,0 sec (засечь невозможно, почти html), серверные мониторы показывают 0,01 сек. ------> динамика стабильна: 0,34-0,39 sec PS. Вы можете поставить таймеры на PHP в шаблоне и замерить скорость работы страниц при работе, собственно PHP. ВАЖНО ЗНАТЬ, что с xFPC для гостей PHP В ШАБЛОНЕ НЕ БУДЕТ РАБОТАТЬ.

Да я в общих чертах все это описывал. Но может на досуге еще напишу подробный топик как это делается.

О! Для версии сайта для анонимусов еще третье надо сделать, а именно: Установить xFPC (ссылка, запасная) и будет полный атас, почти как гугл.

А вот это написано плотно, просто и ценно, что достойно отдельного топика. Теперь ведь сервер простаивать будет, аж жалко 8-) ?

А на старом… там сами черти испугаются ужаса и кашмара. Так делается просто: устанавливается phpTemplates+modxSmarty, берется старый шаблон, сохраняется в виде Smarty-шаблона (так же со всеми чанками и т.п.), и в этом уже шаблоне начинаешь все кешируемые сниппеты переводить на {snippet name=...}, а все чанки на {chunk name=...}. А в случае с чанками еще и по возможности полностью код из чанка на его замену (я про это писал почему так). И все. Уже за счет этого как правило нагрузка падает как минимум в два раза. А если еще и общие блоки закешируешь, так вообще сервер отдыхать будет. Вот и все. За пару часов можно серьезно снизить нагрузку на сайт.

И хорошо их делать оба :-)

я заикнулся про дисковые потому, что замечал как при нехватке памяти всё упирается в своп несущей ноды на VDS, и, как следует, кеш — это файлы. Причем мелкие и дофига их. И где они лежат? На диске. Замерив даже примерно каждую операцию можно понять сколько там всего на это уходит, с учетом диких оверселов конечно. Только поэтому я заикнулся насчет дисков, ничего более, я просто грешил на дисковое узкое звено самих серверных систем, а не modx Последние тесты показывают, что диски — узкое место. Но к modx лично отношения мало имеют, разве что только кешируя файлами.