Все началось с того, что прочитал статью на 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-канала — обращаемся к сайту-источнику, предварительно проверив нет ли его уже в актуальном кэше. Получаем список статей и отображаем, создав превью изображений.
Есть ряд ограничений, о которых стоит сказать:
- Картинки-картинки-картинки. Каждая лента грузит изображения для статей размером 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 на «ты» — так как у меня эта область явно хромает.