Beekeeping #2



Over the past few weeks, I’ve been carefully developing test suites for Yeti which simulate a few scenarios like: casual users, power users, long-form readers and the like. Over all the test suites, one thing stood out: The obscene amount of power wasted in downloading content which was never read in these simulated situations. 

CPU

Every time you launch the app, three things happen:

  • Your feeds are loaded including Folders information
  • If any unread articles are available, those are loaded as well (upto a maximum of 25 in this cycle)
  • Your bookmarks are synced. Any new bookmarks are downloaded. 

Permitted that there is a network connection available, there’s a lot of data transmitted over the wire. Your phone’s modem is responsible for loading this data consuming considerable amount of power. When this reaches the CPU, it converts the data to Elytra’s internal model structures and is cached in the RAM. 

However, in all of the simulated tests, not all articles were read. This lead to a lot of data that was never used. So to reduce this waste, I first decided to make all unread articles load with the content. This was a good first step. To improve this further, I tested again by returning no content on any of the articles.

In both of these cases, the articles were loaded on-demand when the simulated user opened the article. 

Here’s how the CPU was impacted.

CPU consumption across Normal, Stripped Unread and All Stripped datasets.

As you can see, stripping the data from the articles and loading it on demand saves a lot on the CPU processing power. Modern iPhone and iPad CPUs like the A10, A10x and A11 are really power efficient, but if the app can avoid any kind of overhead, it’s always worth stripping it off. 

Data 

Data consumption across normal, stripped unread and all stripped datasets.

Similar trends can be observed in Wireless data consumption. By stripping off the overhead, a lot of unnecessary data was avoided from being transmitted, and therefore loaded. This not only saves power, but also saves bandwidth on your devices and this is especially critical if you’re on a metered connection. This also saves me some $$ on server bandwidth costs.

A 8 times reduction in data costs is a huge gain. All these data points are aggregate averages across the various test suites

Overall Power Consumption

As you can imagine, reducing CPU and data usage considerably impacts power consumption. This is not only great for your device’s battery, but also an invisible user experience benefit. 

Power conspumption over 3G, LTE and Wi-Fi across the Normal, stripped Unread and all stripped datasets.

It’s immediately evident that this was a step in the right direction. Not only do we all save money, bandwidth and time, but also should be able to use our iOS devices for a few charge cycles more or at least that’s the vision.

This change is now available in the latest build of Elytra. Apart from this, here are few other things:

  • The dark themes no longer cause jumpy navigation bars. 
  • There is a basic implementation of In-App purchases. You can try it out. This won’t affect anything in the app. Also, you aren’t charged during the Testflight run.
  • Improves memory management for long form articles.
  • Implements Cover images for articles that provide this information.
  • Fixes line height of headings. 

Notes

Version: 1.0.0
Build 73.
Pipe: Beta-02

Back