Lightening the load of RSS
by ZetaGecko | Add Your Comments | Atom/RSS
One of the big challenges facing RSS as is grows is the need to ensure that, with increasing numbers of subscribers, bandwidth requirements don't balloon out of control. RSS 2.0 begins to address this with the cloud subscription interface. Many opportunities remain for extending cloud or creating an API that could plug in to RSS as an extension to provide various ways to reduce bandwidth consumption. Over time, I'll be posting a number of my ideas for such an API here.
Some methods of reducing bandwidth usage would require the server to dynamically generate the feed, or to cache many different versions of the feed and then dynamically choose which static document to feed in response to client requests. The decision of whether to support any such methods would have to be based on whether bandwidth of processing power was the bottleneck on a particular server. Any API should probably allow for servers which support whatever subset of the API they choose.
The first method I propose for reducing bandwidth usage is to allow the client to request a subset of all the elements in an RSS feed. For example, a webmaster who wants to display the headlines and links from a feed could request that only the link (or guid, if it's being used for the link) and title elements of each item be sent. Especially for feeds where the description contains full content rather than just a summary, this could save enormous amounts of bandwidth. Another example of how this could be used is that RSS readers could request only the elements they know how to display.
While brainstorming, I thought that perhaps clients should also be able to request that only a certain number of bytes of a particular field (the description, usually) be sent. This, however could create problems if, for example, an HTML tag or encoded entity were chopped in half by the truncation, or if only the first of an HTML tag pair were sent. If the API were to allow requesting only a portion of an element, either the server or the client would need to have extra intelligence built in to address these issues, which may be difficult to implement dependably.