SharePoint Alfresco PHP MySQL
О сайте Контакты
понедельник, 9 июня 2014 г.

Настройка частоты обновления RSS

Как настроить частоту генерации RSS, чтобы клиенты не скачивали поток напрасно?

На многих регулярно обновляющихся сайтах встроен RSS. Это удобно для пользователя и привлекательно для вебмастера: люди будут постоянно в курсе новинок, формируя таким образом ядро постоянных посетителей. Однако, зачастую новинки на сайте появляются в строго определенные часы (или дни), например, рабочие. Как объяснить RSS-клиенту посетителя, что в определенное время обновлений не будет, чтобы он не посылал лишние HTTP-запросы?

Сразу оговорюсь, это статья для тех, кто генерирует RSS на своем сайте, а не тех, кто читает. Частота опроса сервера на клиенте легко настраивается в виде интервала: раз в минуту, в час и т.д.

Казалось бы, в стандарте RSS должен быть какой-то параметр, типа frequency, который объявляет частоту обновления канала. Но не тут-то было, всё оказывается организовано по-другому, хоть и достаточно просто. В RSS-канал можно добавить тег skipHours, внутри которого перечислить, в какие часы суток в RSS-канале не бывает обновлений. В эти часы клиент, если он правильный, не будет слать запросы к серверу. Пример:

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Заголовок тестового потока</title>
    <link>http://www.test.com</link>
    <description>Описание тестового потока</description>
    <skipHours>
      <hour>0</hour>
      <hour>1</hour>
      <hour>2</hour>
      <hour>3</hour>
      <hour>4</hour>
      <hour>5</hour>
      <hour>6</hour>
      <hour>7</hour>
      <hour>17</hour>
      <hour>18</hour>
      <hour>19</hour>
      <hour>20</hour>
      <hour>21</hour>
      <hour>22</hour>
      <hour>23</hour>
    </skipHours>
    <item>
      <title>Заголовок записи</title>
      <link>http://www.test.com/rss</link>
      <description>Описание первой записи RSS</description>
    </item>
  </channel>
</rss>

Время между 12-ю часами ночи и часом ночи обозначается нулем. В приведенном выше примере часы с 12 ночи до 8 утра и с 5 вечера до 12 ночи объявлены как часы без обновлений, в которые RSS-клиентам нет смысла «затягивать» изменения. Выглядит, мягко говоря, громоздко, но другого в стандарте не дано.

Помимо часов, можно клиентам указать и дни без обновлений с помощью тега skipDays, например:

<skipDays>
  <day>Saturday</day>
  <day>Sunday</day>
</skipDays>

То есть, в субботу и воскресенье мы обычно не работаем, а значит, и RSS-канал можно не опрашивать.

Зачем все это нужно? Чтобы сэкономить ресурсы сервера, ведь RSS-клиентов у нашего гипотетического сайта может быть очень много. С другой стороны, клиент не будет лишний раз «напрягаться» сам, чтобы отправить запрос и получить в ответ, что ничего не обновилось.

Sergey Lysenko, понедельник, 9 июня 2014 г.

Комментарии: