Статьи

Еще 6 обязательных настроек Grav: готовность к хакерским новостям!

Ранее мы рассматривали некоторые важные плагины Grav, с помощью которых можно завершить установку личного блога. В этой статье мы рассмотрим некоторые дополнительные, усовершенствованные плагины, завершив их установкой Varnish для суперэширования, подняв производительность на совершенно новый уровень.

Grav Logo

Связанные страницы

Как только в блоге будет достаточно сообщений, удержание пользователей становится более трудным — поскольку пользователям трудно найти связанные или интересные посты для чтения, они покидают ваш сайт. Плагин связанных страниц помогает в этом.

Он содержит некоторые разумные значения по умолчанию для расчета оценок отношений между сообщениями и может включать сканирование заголовков, анализ содержимого, сопоставление по таксономиям и многое другое. Как только сканирование настроено, рендеринг страниц является вопросом включения сгенерированного списка связанных элементов в существующий шаблон, например так:

{% if config.plugins.relatedpages.enabled and related_pages|length > 0 %} <h4>Related Posts</h4> {% include 'partials/relatedpages.html.twig' %} {% endif %} 

Обратите внимание, что стиль, хотя и приличный в форме по умолчанию, в конечном счете, зависит от вас. Вот где следующий плагин пригодится.

Пользовательские JS и CSS без расширения темы

Иногда все, что вам нужно сделать, это включить небольшую модификацию JS или CSS на ваших страницах. В этом случае полное расширение темы будет излишним. Вот где плагин активов приходит.

После установки у вас есть возможность добавить JS / CSS frontmatter на ваши страницы:

 {assets:js order:10} custom-script.js /blog/some-blog/post/script.js //cdnjs.cloudflare.com/ajax/libs/1140/2.0/1140.min.js http://somesite.com/js/cookies.min.js {/assets} {assets:inline_css} h1 {color: red !important;} {/assets} 

Обратите внимание на префикс inline_ при работе со встроенным CSS / JS

Это тогда позволяет вам легко настроить внешний вид определенных страниц при необходимости — например, добавить некоторую причудливую демонстрационную логику в микс, пользовательский стиль в случае, если страница отличается от того, что вы обычно публикуете, и многое другое.

Много постов бессмысленно, если у людей нет возможности найти их и найти ту, которую они ищут. Учитывая, что Grav — это система с плоскими файлами без базы данных, поиск занимает больше, чем просто запуск запроса MySQL LIKE %% .

Плагин simplesearch (названный так просто потому, что он использует очень простой метод поиска — сопоставление строк) добавляет эту функцию. Он поставляется с собственным частичным полем поиска и страницей результатов поиска, но они, конечно, могут быть полностью настроены.

Например, после копирования user/plugins/simplesearch/templates/simplesearch_results.html.twig файл user/themes/cacti-swader/templates/ и его изменения, вот как выглядит реализация в моем собственном блоге:

Поисковая реализация на bitfalls.com

Предостережения

фильтры

Чтобы убедиться, что он работает на всех страницах, значение filters в файле конфигурации должно быть ПУСТОЙ, а не несуществующим. Если вы удалите его полностью, он вернется к исходному файлу конфигурации плагина по умолчанию, который ограничивает результаты теми, у которых есть category blog . Вот моя конфигурация в user/config/plugins/simplesearch.yaml :

 enabled: true built_in_css: true display_button: false min_query_length: 3 route: /search filters: "" template: simplesearch_results order: by: date dir: desc 

Производительность

Несмотря на эффективность, этот плагин будет терять производительность по мере роста вашей коллекции постов, потому что он перебирает каждую имеющуюся у вас страницу и сравнивает ее содержимое с заданным поисковым запросом. Длина постов и их количество напрямую зависит от эффективности поиска. Рекомендуется внедрить более мощный поисковый движок, когда количество сообщений достигнет критической массы (например, более 1000).

Multi-язык и SimpleSearch

Если вы используете переключатель языка с использованием многоязычной темы, вы можете изменить частичное langswitcher.html.twig для игнорирования строки поискового запроса при переключении языков из-за этого . Используйте инструкции в связанной проблеме, чтобы решить проблему. И пока мы говорим о языке, чтобы изменить строку «Результаты поиска» и другие значения на странице результатов поиска, вы можете либо изменить user/plugins/simplesearch/language.yaml , либо изменить строки, используемые в шаблон результатов поиска, чтобы использовать те, которые определены в языковом файле темы.

Комментарии

Чтобы добавить раздел комментариев, мы можем использовать плагин JsComments . Это абстракция нескольких популярных систем комментирования, позволяющая мгновенно установить их для всего сайта, просто изменив файл конфигурации и добавив соответствующий лицензионный ключ или идентификационный код.

К сожалению, Disqus по-прежнему является наиболее приемлемым вариантом на сегодняшний день, так что давайте продолжим.

Интерфейс администратора панели интуитивно предлагает все параметры, которые нам нужно установить, в частности, «Включено» и «Активно» на главной вкладке, а также короткое имя Disqus на вкладке «Disqus»:

Вкладка disqus

После этого фрагмент JS должен быть вставлен в шаблон или страницу, на которой мы хотим визуализировать комментарии. Этот фрагмент кода идентичен для всех поставщиков и автоматически отключает код системы комментариев, когда вы выбираете другого поставщика:

  {% if config.plugins.jscomments.enabled %} {{ jscomments() }} {% endif %} 

Вот как выглядит реализация в моем блоге:

Disqus на Bitfalls.com

Отличие от официальных комментариев

Существует также официальный плагин комментариев, который предоставляет встроенные функции комментирования и сохраняет комментарии в локальных файлах, но в нем отсутствуют некоторые важные функции (см. Список в файле README), и он основан на плоских файлах, а не на JS, что означает, что они не играть хорошо с полным кэшированием страниц.

Когда страницы с комментариями JS кэшируются, они загружаются асинхронно после отображения страницы, независимо от уровня кэширования, что обеспечивает постоянную актуальность, даже если вы очень агрессивно кэшируете свой контент.

Оптимизация изображений и CDN

Любая хорошая запись в блоге богата текстовыми изображениями для повышения читабельности. Но иногда изображения становятся довольно тяжелыми, а пропускная способность очень важна, особенно во время скачков трафика. Есть два варианта: CDN и оптимизация изображения.

CDN

CDN-плагин Grav прекрасно работает с CDN-зонами, такими как MaxCDN.

CDN «Pullzone» — это особый тип настройки, который предлагают многие CDN, когда при запросе файла с вашего сайта он сначала копируется в CDN, а затем во все его удаленные местоположения для обслуживания по всему миру, а затем возвращается обратно пользователю. ,

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

После полной настройки на стороне CDN реализовать зону притяжения в Grav чрезвычайно просто. Плагин предоставляет типичный yaml конфигурации yaml (полностью редактируемый в интерфейсе администратора):

 enabled: true inline_css_replace: true pullzone: yourdomain.cdn.com tags: 'a|link|img|script' extensions: 'jpe?g|png|gif|ttf|otf|svg|woff|xml|js|css' 

Вышеуказанное означает: заменить все ссылки на ресурсы доменом yourdomain.cdn.com , включая вызовы url() в CSS, и проделать то же самое для всех перечисленных extensions во всех тегах a , link , img и script . Это эффективно делает CDN автоматически обслуживать все статические активы.

Для ресурсов, которые вы не хотите CDNed, также есть режим nocdn .

Оптимизация изображения

Принимая во внимание, что CDN будет обслуживать активы с большой эффективностью и на больших расстояниях, вам также может быть интересно просто оптимизировать ваши изображения и уменьшить их размер файла. Довольно специфический плагин Optimus связан с сервисом оптимизации изображений Optimus .

Optimus — это, пожалуй, гораздо более доступный сервис, который стоит 19 долларов в год для личных проектов, но ему не хватает георазнообразия CDN, и он обрабатывает только изображения. Тем не менее, это тоже может привести к удивительной экономии пропускной способности.

После установки Optimus автоматически активируется и отправляет все изображения для обработки в сервис. Необходимо помнить две вещи:

  • Первоначальная загрузка изображений будет медленной, поскольку Optimus потребуется время, чтобы обработать их и отправить обратно
  • изображения будут сохраняться и кэшироваться локально — они возвращаются обратно на ваш сервер, так что вы все равно их обслуживаете.

Идеальным подходом было бы использование Optimus для оптимизации изображений, а затем пересылка их в зону извлечения CDN, что позволило бы снизить пропускную способность для статических ресурсов почти до 0%, но при общей стоимости обходиться в дополнительные 100 долларов в год.

Есть и другой способ супер-кэширования вашего сайта, и он бесплатный.

Кеширование с помощью лака

В качестве последнего шага супероптимизации мы воспользуемся преимуществом Varnish , обратного прокси-сервера, который кэширует полные страницы в течение произвольного количества времени и обслуживает их очень и очень быстро. Он защищает ваш сервер от скачков трафика и экономит ресурсы сервера для других процессов и сайтов.

После установки его с помощью sudo apt-get install varnish мы можем изменить некоторые файлы настроек. Значение по умолчанию для DAEMON_OPTS в /etc/default/varnish на самом деле хорошо, как и по умолчанию:

 DAEMON_OPTS="-a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m" 

Примечание: узнайте об этих значениях в нашем оригинальном сообщении о лаке

Другой файл, на который следует обратить внимание — это /etc/varnish/default.vcl и его backend значение.

 backend default { .host = "127.0.0.1"; .port = "8080"; } 

Порт должен быть изменен на порт обычного сервера, а хост должен быть переименован в имя хоста сервера, как определено в конфигурации сервера. Для моего примера во время локальной разработки, это выглядит так:

 backend default { .host = "test.app"; .port = "80"; } 

Чтобы это работало, в /etc/hosts сервера, на котором вы запускаете сайты разработки, должна быть запись 127.0.0.1 test.app , и вам необходимо иметь конфигурацию сервера этого конкретного сайта с именем test.app , вот так:

 server { listen 80; listen 443 ssl; server_name test.app; ... 

Теперь комбинация этих файлов гарантирует, что при посещении страницы http://test.app:6081 Varnish фактически извлекает содержимое из http://test.app:80 , сохраняет его и пересылает в браузер.

То же самое относится к живым серверам, но, очевидно, они будут отличаться по доменным именам.

Развертывание для производства влечет за собой следующее:

  • изменить порт для Nginx / Apache на что-то эзотерическое (9123)
  • измените внутренний порт в /etc/varnish/default.vcl на этот порт
  • измените внешний порт Varnish на 80

После этого вы успешно запустили сайт с кэшированием на основе Varnish, и вы готовы к таким всплескам трафика Hacker News / Reddit!

Вывод

Как вы можете видеть, с Grav (и вокруг него) можно многое сделать, и мы еще даже не рассматривали полностью настраиваемые плагины или темы — то, что мы сделаем в ближайшем будущем.

С настройкой, представленной в этом посте, и плагинами из предыдущего списка , ваш блог на 100% готов к работе.

Вы уже попробовали Grav? Как вы относитесь к нашим предложениям в этом посте? Подойдете ли вы к чему-нибудь по-другому? Дайте нам знать!