Pull to refresh

Смотрим RSS подписки по-новому

Reading time 4 min
Views 1.7K
Scrollit.ru

Все началось с того, что прочитал статью на TechCrunch про приложение для iPad — Pulse. Это приложение для просмотра RSS-лент. Именно просмотра, потому что список выстраивается в горизонтальные ленты с превью изображений из каждой статьи. Их можно прокручивать, переходя к более ранним статьям.

Мне показалось это удобным и я полез сразу на сайт, узнать есть ли что-то подобное для PC (так как айпадов не имеем). К слову, после iPad ребята взялись за iPhone и мобильные устройства на базе Android и уже выпустили приложения и для них. Но вот версии для PC они не стали делать, причем на своем форуме писали, что это пока не планируется. Хотя в то же время я видел много вопросов именно с просьбой сделать что-то для обычного компьютера.

Ну что ж, подумал я, раз спрашивают — значит спрос есть, значит удобство интерфейса на самом деле может привлечь пользователей использовать такой сервис вместо привычных RSS-ридеров, в том числе и на обычном компьютере. Поэтому решил я сделать нечто подобное. Что из этого получилось за 2 недели работы в свободное время — можно посмотреть видео ниже или демо на сайте.



Инструментарий


Теперь обо всем подробней.
Использовал PHP-фреймворк — CI, JS-фреймворк — jQuery. Эта парочка мне нравится давно, поэтому от них не отказываюсь.

Для удобства интерфейса добавил частично еще JQuery UI — Dialog, чтобы вводить всю информацию, а также отображать статьи из лент. Также взял Sortable, чтобы сортировать списки методом drag-n-drop.

Cтоит отметить, что первое, с чего начал гуглить — это плавная прокрутка аля iphone. Когда отпускаешь элемент, он продолжает еще какое-то время прокручиваться по инерции. Единственное, что понравилось — это плагин для jQuery Overscroll. Сделаем парню рекламу — нам не жалко, а кому-нибудь может пригодится.

Для получения данных rss-потоков прикрутил simplepie. Для создания превью изображений — использовал timthumb. И то и то кешируется. Еще использовал Simple HTML DOM Parser для нахождения первого изображения в статье, если оно есть.

Функционал


Что получилось — достаточно простой и базовый сервис, который отображает ленты RSS в удобном формате. У сервиса много ограничений, а значит при желании есть много чего, что можно доработать и развить. Сейчас при добавлении RSS-канала — обращаемся к сайту-источнику, предварительно проверив нет ли его уже в актуальном кэше. Получаем список статей и отображаем, создав превью изображений.

image

Есть ряд ограничений, о которых стоит сказать:
  • Картинки-картинки-картинки. Каждая лента грузит изображения для статей размером 200*200 px, получается ~150 КБайт на изображение. Если в ленте в среднем 20 статей и все имеют изображение, это получается 3Мб траффика на ленту. А если лент много? В век современных технологий, все более удешевляющихся тарифов на интернет и появления повсеместного безлимита — я не вижу здесь особых проблем, но все же круг пользователей пока ограничен.
  • С другой стороны, эти же картинки порождают кучу запросов к серверу. Как вариант, можно доработать логику, чтобы на одну подписку генерировался общий рисунок, который потом смещением через background-position распределялся по нужным статьям одной подписки.
  • Далее, в данный момент сервис не хранит сами статьи RSS-лент, а хранит только URL. Таким образом, ленты строятся в режиме он-лайн (с проверкой в кэше, конечно).

    Отсюда и основные ограничения:
    • отображаются только последние статьи, которые выдает сайт-источник. Обычно это 20-25 последних статей. У себя поставил ограничение на 40.
    • Нельзя помечать отдельным стилем уже прочитанные статьи, нельзя реализовать функционал «отметить все как прочитанные».
    • Нельзя добавлять статьи в избранное.
    В общем этот пункт и является основным, который можно докручивать. Но, так как мне он показался существенным, пока его делать не стал, иначе сроки могли затянуться. То есть по сути, нужно рассчитывать и хранить для каждого потока время обновления, и в фоновом режиме производить обновления потока, сохраняя новопоявившиеся статьи.
  • Еще одним слабым звеном пока считаю — оптимизацию. Хоть и использую кэш изображений и потоков, подгрузку можно переделать динамической. Как это вижу:
    • По горизонтали, в принципе с существующим ограничением в 40 статей на подписку сейчас — пока не имеет смысла. Если делать хранение всех статей, то при достижении самого правого края — можно динамически подкачивать следующие N статей и так далее.
    • Также сделать динамическую загрузку изображений только когда до них дойдет вертикальная прокрутка в браузере — сейчас грузятся все, даже которые не попадают в видимую область.

Трудности


При тестировании на большом количестве подписок столкнулся с тем, что simplepie, который упомянул раньше, очень сильно жрет память. На 20 подписок получается порядка 80 Мб. Причем не важно откуда берутся данные — непосредственно подкачкой из фидов с последующей обработкой, либо уже из кеша файлов (где, по логике уже все должно быть очищено и обработано, и нужно только десериализовать данные. Общий вес всех файлов кэша порядка 4 метров). Пишут, что проблемы наблюдаются на PHP раньше 5.3 (у меня 5.2.Х), но решение, которое они предлагают (метод __destruct()), мне особо не помогло. Перепробовав порядка 5-8 других rss парсеров, понял, что по качеству simplepie все-таки наверно единственно нормальный, хотя другие по потреблению ресурсов, конечно, более оптимальные — но там проблемы с определением подписок. Simplepie же на самом деле всеяден.

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

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

Ссылка на сайт — scrollit.ru.

На сайте сделал форму reformal для обратной связи — если будут пожелания, пишите!

Сайт пока на простом хостинге. По возможности оптимизировал, но так как процесс генерации достаточно ресурсоемкий — все это может лечь. Если что — ругайте, но не громко.

PS
Да, если сервис понравится и есть желание поучаствовать в развитии — пишите. С удовольствием объединил бы усилия с кем-нибудь и поработал в команде. Нужен опыт в CI и jQuery. Здорово если и в верстке с CSS на «ты» — так как у меня эта область явно хромает.
Tags:
Hubs:
+49
Comments 46
Comments Comments 46

Articles