March 20th, 2012

Working on the computer, Working

Hacking [& slashes] to victory

I spent some time yesterday hacking away at the feed reader I have on my server, Tiny Tiny RSS. It's one I got a long time ago and has been working fairly well, up until the last week or two. While the version I'm using is outdated, I've resisted upgrading it because I strongly dislike the new primary interface. The mobile interface is also lacking certain features I would like, at least in the older version.

The primary thing I was looking into is why everything was so slow in the primary interface. I installed the Zend_Db_Profiler on top of the database function to discover that it was doing in excess of 180 queries every time it took any action, averaging around 4-5 seconds for just the queries, with some jumping up to 300 queries and/or 15 seconds. There were a lot of very similar repeated queries that should have been compressed into one aggregate call. One of the first things I did was take 30+ preference queries and just pulled back the entire set at once for the request or session. That brought the number of queries down to about 150, but still taking just about as long. Trying to fix the rest of the duplicating queries would have taken a significant overhaul of the system, and the project is already pretty poorly done to begin with (everything is a function in one file).

Instead I compared the mobile interface and found much more favorable performance, only one second per overview request, around 30 queries, and browsing the feed only took about five queries per article. While being more favorable, I wanted to modify a few things that have been bugging me since day one that the primary interface has yet the mobile lacked, or that I personally would use.
  • Removal of 'Search...' list item (takes up precious space).
  • Ability to view all unread articles in a category, not just one feed of the category at a time.
  • View feed name next to article title when listing articles by category aggregate.
  • Previous & Next navigation buttons at the top of the article view.
  • Ability to mark an article unread again.
  • Removal of the 'publish' button.
  • Redirect back to the overview when 'next' past the end of the feed.
  • Automatic refreshing of the overview page for new articles.
  • Update page title with recently updated unread count.

Some day I may make my own feed reader, which will include checking of article comment feeds and scaling update time (so as not to too frequently check a feed that hasn't updated in a very long), along with much better performance and coding structure. Someday. In the mean time I've switched to the mobile interface even in my desktop browser.