модуль

БлогНовый Cache Expiration - полная свобода в выборе правил для сброса кэша страниц

В данной статье я хотел бы поговорить о сбросе кэша страниц. По сути, эта статья вытекает из материала про Memcache Storage Page Cache и снижение нагрузки на сервер. Однако как верно заметил товарищ @quicksketch, в моём Memcache Storage PC не было ничего, что привязывало бы этот модуль конкретно к мемкэшу. После небольшого обсуждения было решено смержить все его фичи в Cache Expiration, который на тот момент включал в себя крайне много хардкода. Потратив приличное время на объединение Memcache Storage PC и Cache Expiration, а потом и на написание новых фич (и в итоге переписав всё с нуля) была создана вторая ветка этого великолепного модуля - Cache Expiration 7.x-2.x.

БлогКэш страниц. Снижение нагрузки на сервер с помощью Memcache Storage Page Cache

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

Page Cache в Drupal 7

Эту часть я разобью на 3 небольших ступени, каждую из которых необходимо полностью понимать.

Ступень первая. Ядро Друпала содержит механизм кэширования отображаемых html страниц для анонимных пользователей. Вполне разумно - какой смысл создавать каждый раз одну и ту же страницу, если можно сгенерировать её для одного анонима, а остальным отдавать уже готовый результат. В таком случае Друпал не будет каждый раз вызывать функцию для генерации и рендера страницы, а лишь заберёт страницу из кэша и сразу отдаст её пользователю.

БлогПеренос кэшированых данных в оперативную память. Memcache Storage.

Memcache Storage

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

Инвалидация кэша

Основная проблема кроется в плохой обработке временного кэша. При хранении в базе данных такие данные помечались флагом -1 (CACHE_TEMPORARY) и обрабатываются обычными sql запросами. Однако мемкэш не предполагает сохранения кэша с отрицательным ключём. Он умеет хранить данные либо вечно (пока оперативная память не будет очищена, или данные не будут удалены явным образом), либо какое-то определённое время. Данные с временным сроком истечения кэша приходилось обрабатывать отдельно, и модуль Memcache справлялся с этим не самым лучшим образом.

БлогVkontakte CrossPoster 2. Воскрешение.

VK Crossposter

Сегодня произошла очередное возвращение кросспостинга во VK. Инициатива по допиливанию модуля была поднята разработчиком по имени Дмитрий, за что ему большое человеческое спасибо. Однако давайте обо всём по порядку.

Разработчики Вконтакта так и не дали возможность публиковать веб-сайтам сообщения на стену. Но теперь мы будем маскироваться под Desktop приложение, чтобы всё работало как хочется. Из-за этого при получении токена из вконтакте нам придётся столкнуться с одним маленьким костылём. Однако, согласитесь - это намного лучше, чем неработающий кросспостинг :)

БлогМодуль по добавлению мета-тегов. Path Metatags.

Не так давно мной был написал модуль, позволяющий удобно добавлять мета-теги Path Metatags. Алгоритм его работы похож на работу Path Breadcrumbs (по шагам):

  • Указание пути, на котором будут отображаться мета-теги
  • Привязка к переменным из пути контекста
  • Указание правил показа мета-тегов для пути
  • Выбор мета-тегов и информации для отображения

Подробно о добавлении мета-тегов я расписывать не буду, т.к. всё то же самое можно почитать в статье о модуле хлебных крошек. Однако последняя форма с самим добавлением мета-тегов, безусловно, другая:

БлогУскоряем бутстрап или борьба с неправильным удалением модулей

На одном из проектов я столкнулся с необходимостью оптимизации сайта. Проанализировав серверную часть сайта я заметил, что бутстрап на каждую загрузку страницы съедал ~350 милисекунд. Довольно много, учитывая, что это лишь загрузка необходимых компонентов. Потратив ещё некоторое время на поиск проблемы я выяснил, что каждый раз при загрузке страницы Друпал сканировал все мои папки с темами и модулями заново. Это и являлось основой задержкой в бутстрапе, т.к. на это сканирование тратилось около 280 милисекунд (102 модуля и 2 темы). И это при том, что проект стоит на отдельном сервере, который полностью заточен под Drupal 7.

После осознания проблемы у меня возникло два вполне логичных вопроса:
1. Какого @#$ так долго?
2. Почему это нельзя было закэшировать?

Как выяснилось - Друпал это уже кэширует. И всё обычно хорошо и правильно работает ... пока разработчик не начинает удалять модули неправильно. Некоторые разработчики удаляют модули деревянным способом: физическим удалением модуля с сервера. И вроде бы модуль перестаёт работать, и вроде бы результат достигнут... Однако что при этом происходит в Друпале?

БлогVkontakte CrossPoster 2. Возвращение.

Vkontakte CrossPoster

Сегодня знаменательный день, друзья - мой Vkontakte CrossPoster отмечает возвращение в строй. Чтобы пояснить, где же он был раньше и что с ним происходило, я расскажу небольшую историю.

История

В сентябре 2011 года я написал модуль, который позволяет автоматически отправлять материал вконтакт (пруфлинк). Он отправлял данные автоматически куда надо (использовалась авторизация через протокол OAuth 2.0), и пользователь мог даже не подозревать, что они отправляются. Однако через 4-5 месяцев разработчики вконтакте (ни слова не сказав, даже в документации) закрыли возможность отправлять данные с сайтов во вконтакте (через OAuth 2.0). Немного поковырявшись в имеющейся на тот момент документации, я нашёл другой метод кросспостинга - Open API. Это очень глобально затронуло модуль, т.к. теперь пользователю приходилось подтверждать кросспост в всплывающем окне (Open API работает на js). Это повлекло за собой массу неудобств, начиная от конфликта с некоторыми модулями (например, Overlay) и заканчивая абсолютной невозможностью кросспостить данные любому пользователю, отличному от авторизованного создателю и администратору группы. После этого я на модуле поставил крест, т.к. он потерял свою фишку и удобство в работе, хоть и кросспостить можно было продолжать.

УрокЗнакомство с Display Suite

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

Страницы