Спасибо за отзыв и информацию.
Итак, дописал основной коммент :-) Спасибо за собирательный топик! А я дам несколько комментариев-уточнений. а) Открываем сниппет phpThumbOF(OF!!) и вставляем внутрь(!) его КОД сниппета phpThumbsUp. Убили много зайцев сразу и не надо ковырять сотню чанков. Минусы не стоят того, чтобы заботиться о них. Я бы вот так не стал делать. В среднестатистическом сайте не так много вызовов этого сниппета по шаблонам и чанкам, чтобы убивать обновления и т.п. Хотя если посмотреть на то, как pThumb устанавливает с обновлением сниппет phpthumbof, то тут уже многое становится не однозначным. <?php $output = $modx->smarty->fetch('header.tpl'); $output .= $modx->smarty->fetch('inside.tpl'); $output .= $modx->smarty->fetch('footer.tpl'); return $output; Я бы все-таки не стал вызывать 3 шаблона таким образом, а сделал бы один общий шаблон, и при необходимости сделал в нем инклюды {include file=«header.tpl»} и т.п., тем более что в таком случае можно использовать локальное кеширование подшаблона, а в случае с приведенным примером этого сделать нельзя (если только не включено глобальное кеширование Smarty). а) Этой копии ставим тип ресурса «Документ с PHP-шаблоном» (проверено, так быстрее). Вот это утверждение очень сомнительное. Я оставил CRC phpTemplateResource так, на всякий случай (так сказать, остался в наследство). Но в силу особенностей его развития, он в итоге деградировал и оказался менее функциональным, чем его предок. Дело в том, что в нем исключено кеширование шаблона. То есть при любом раскладе его шаблон будет вызываться и выполняться, в то время, как нативный класс не выполняет шаблон, если он закеширован уже и у него не стоит phptemplates.non-cached=true. Так что родной класс, если уже отработан и закеширован, а методе process() сразу вернет конечный код, а phpTemplateResource в любом случае выполнит шаблон, и это никак не может быть быстрее. К тому же, как практика показала, создавать именно «Документ с php-шаблоном», а не просто документ — бонально неудобно. Например: {link id="55"}
выглядит правильно, но если он обрамлён еще в одни кавычки вот так: a href="{link id="55"}"
то нифига не заработает. Неверное утверждение. Смарти парсит все внутри фигурных скобок, и ему пофиг что за пределами этих скобок. Он спарсит {link id=«55»} и заменит на его значение, и все будет ОК. К слову, если пробелов нет, то можно вообще без ковычек, к примеру {link id=55}.
Вот еще пример того, как можно вызывать вместе с ковычками: <img src="{snippet name="phpthumbof" params="input={$object.image}
&options=h=130&w=200
"}" /> И с этим нет никаких проблем.
Резюме: конечно, ошибок вижу много. Но не это главное! Главное то, что ты смог значительно ускорить свой сайт. И быть может далеко не всем поможет этот топик (то есть не будет исчерпывающим руководством), но он точно будет примером того, что при желании можно ускорить свой Рево-сайт очень значительно. Спасибо!
Кстати, реальная его польза в плане кеша у меня вызывает кучу сомнений, но зато в нем есть минификатор CSS и JS, то есть как раз то, о чем я недавно спрашивал. На досуге покопаю. Спасибо за наводку!
Вот здесь подробный обзор: blog.agel-nash.ru/2013/8/thumb.html Автор советует по многим причинам именно pThumb ставить. Кстати, он заменяет сниппет phpthumbof, так что на сайте даже сниппеты перебивать не придется.
Блин, пока пишу основной обстоятельный коммент, попутно ковыряю xFPC. Чел жгет :-) if ((int) $combineJsAndCss == 1) { $combineJsAndCss = true; } else { $combineJsAndCss = false; } Только сегодня видел картинку «оптимизацией тут и не пахнет»)))
У меня вопрос поводу phpThumbsUp: у MODX появился еще пакет pThumb. Какой все-таки лучше ставить?
Продолжая предыдущую тему, анонсирую публикацию новой версии пакетов modBlog и modSociety для построения блого-социальных сайтов на MODX Revolution. Опять-таки, для начала видео-демка. Что нового? В прошлой версии еще только блоги создавались без всяких топиков.
В новой версии добавлены топики, то есть уже какой-то намек на структуру. Уже можно создавать блоги и топики. Но это все еще заготовка, так как редактировать блоги и топики пока можно только в админке, и нет еще главного — комментариев и голосов. Тем не менее уже есть немало фишек, о которых я хочу поведать. 1. Блоги и топики как бы не связаны между собой, то есть Блог — это один тип документов, а Топик — другой. При этом топик не обязан быть дочерним ресурсом именно для блога, он может находиться где угодно в структуре. То есть такая модель позволит легко встраиваться в любой готовый сайт со своей особенной структурой. 2. Связи Блог-Топик содержатся в отдельном объекте SocietyBlogTopic. При этом топик может быть привязан сразу к нескольким блогам (как на Хабре). Если топик не привязан ни к одному блогу, то он считается топиком из личного блога автора. 3. Весь код написан на 100% MODX-технологиях с использованием xPDO. В результате код получается очень сжатый, и гарантируется совместимость с любыми компонентами, использующими xPDO-методы.
К примеру, чтобы получить все блога сайта, можно выполнить вот такой запрос:$q = $modx->newQuery('modResource'); $q = $modx->newQuery('modResource');
$q->where(array(
'published' => true,
'class_key' => 'SocietyBlog',
));
$blogs = $modx->getCollection('modResource', $q); А теперь получим все топики этих блогов foreach($blogs as $blog){
// Получаем связки Блог-Топик
$blogTopics = $blog->getMany('BlogTopics');
// Проходим по каждой связке
foreach($blogTopics as $blogTopic){
// Получаем топик
$topic = $blogTopic->getOne('Topic');
// Выводим информацию о топике в массив
print_r($topic->toArray());
// Получаем ссылку на топик
$url = $topic->makeUrl();
}
} Для удобства разработчиков (чтобы не путались), я ввел специальные методы: $modx->modblog->getBlog();
$modx->modblog->getBlogs();
$modx->modblog->getTopic();
$modx->modblog->getTopics(); Это как $modx->getObject() и $modx->getCollection(), только сразу подставляет критерии class_key, чтобы точно получить именно блоги или топики.
В качестве параметра можно передавать $criteria. К примеру: $blogs = $modx->modblog->getBlogs(array(
'published' => true,
'parent' => 12,
)); Вернет только опубликованные блоги, и только те, для которых родительский раздел имеет ID=12. Или вот так: $q = $modx->newQuery('modResource');
$q->where(array(
'published' => true,
));
$blogs = $modx->modblog->getBlogs( $q);
foreach($blogs as $blog){ $author = $blog->getOne('CreatedBy'); print "<br />Блог создал: ". $author->get('username'); } Таким образом, учитывая формат Хабра и Livestreet, что не взирая на структуру, выводятся просто топики в обратном хронологическом порядке, можно не парясь о структуре выводить все топики, получив через метод $q = $modx->newQuery('modResource'); // Сортируем по дате публикации в обратном порядке $q->sortby('publishedon', 'DESC'); $topics = $modx->modblog->getTopics( $q); 4. Вывести все топики, или топики из определенного блога, или определенного пользователя, или определенного пользователя в определенном блоге, можно используя сниппет BLOG_topicsList. К примеру [[!BLOG_topicsList?user_id=2&blog_id=7]] В общем, MODX действительно себя показывает как очень мощная платформа для разработок. У меня код установщика (который сразу создает все политики, группы пользователей, настройки, структуру и т.п.), наверно больше, чем весь код работающего компонента (в сумме в modBlog и modSociety кода строк так 1000 всего). Я вам точно говорю, что для той логики, которая уже сейчас есть, 1000 строк — это очень-очень мало. Так что кто для себя выбрал MODX как средство разработки — тот вообще не ошибся :-) UPD: Проекты на Гитхабе: github.com/Fi1osof/modSociety github.com/Fi1osof/modBlog Установочные пакеты можно скачать из моего репозитория rest.modxstore.ru/extras/
Попутно скажу, что для измерения скорости открытия сайта не следует учитывать пинги, хопы и ширину канала и/или работающие фоновые торренты. Для ускорения отклика сайта и уменьшения пинга надо применять другие решения. Проверка же вышеизложенного решения, даже с учетом сетевых задержек по территории Европы, приведена ниже: Resolve time: 27 ms Connect time: 19 ms Download time: 206 ms
Resolve time: 19 ms Connect time: 9 ms Download time: 67 ms
Resolve time: 297 ms Connect time: 15 ms Download time: 73 ms
Resolve time: 40 ms Connect time: 21 ms Download time: 102 ms Ссылка, если тоже хотите тут потестить. А также вот еще: Средняя скорость 0.43 sec с 26 точек планеты. Секретная ссылка на службу мониторинга.
Для перелинковки и для сохранения последовательности. Ссылка на вторую часть: modxclub.ru/blog/sandbox/176.html
Замутил! modxclub.ru/blog/sandbox/176.html