Mobile Zone is brought to you in partnership with:

Brian Hitney is a Developer Evangelist with Microsoft Corporation focused on cloud computing. He frequently delivers presentations and works with local community groups and customers on emerging technologies, .NET, and developer tools. Prior to his Developer Evangelist role, Brian worked as a software engineer on a Windows team in Redmond, and before he joined Microsoft he helped build large scale e-commerce applications for various companies across the United States. Brian is based out of Greensboro, NC. Brian is a DZone MVB and is not an employee of DZone and has posted 18 posts at DZone. You can read more from them at their website. View Full User Profile

Incremental App Updates: The Best Invisible Feature of Windows 8

11.16.2012
| 6295 views |
  • submit to reddit

I’m going to talk about one of my favorite Windows 8 features – it’s one that everyone will love, but no one really knows much about.  In fact, it’s one that is so good, you’d think it’s a problem.  (Like, if you hit the power button and your machine _instantly_ slept, you’d think there is a problem, wouldn’t you?)

I’ve got 2 disclaimers.  Obviously I work for MSFT so I’m biased, but the second one is, to Joe’s disgust, I actually have an iPad in house.  The excuse is that I have a large Sonos installation, and the iPad is currently the best and one of the cheapest controllers for it.  Much like buying a PS3 as a cheap blu ray player back in the day, it made the most sense.  But the real reason: I love technology.  I love all of it. 

imageSo let’s get it to it.  The feature is incremental app updates. 

If we look at the anatomy of an application in the Windows Store, it’s an .appx package file that contains all of the assets and declarations for the app, including a BlockMap.  The BlockMap contains hashes of all files within the package.

The user downloads the entire appx, of course, when installing the application.  But when there is an application update, the beauty is that the system automatically can compare the BlockMap and delivery only the blocks that have changed.  This includes partial changes to a large file, like in the following diagram from this talk at //build:image

The reason why this is so awesome is that applications often contain embedded resources that often don’t change.  A publisher makes a minor code fix, perhaps to the design, a typo, or game logic, and you’ll only receive the changes that have been actually made, not the entire package.

imageLet’s look at a real time example as I write this:  I picked an app that needed to be updated and had a little bit of size to it.  I know Scott who developed this app – HeavenWord Bible Study Toolkit and it weighs in at 139 MB.  I remember talking with Scott about this, because the issue of including data (and how much data) within the app is sometimes a tricky decision.

image

I had the app updated and I see Scott published an update:

image

It installed so fast, you’d think there was a problem.  Monitoring my internet bandwidth usage, the update showed up as a little blip (and for those wondering, this isn’t scientific.  There are other devices on the network that might contribute usage, but to my knowledge, nothing was actively streaming/running at the time).

image

This accrued a couple hundred KB and the entire graph covers a 10 minute window (time at right side of graph: 12:46pm).  More details in other screen clippings about the graph, but note the first step on the x-axis measures 122kb/s and the update barely touched that.  So, I open the iPad and notice a whopping number of updates that I haven’t checked in a few weeks.  Paper by FiftyThree weighs in at ~50MB, so let’s give that a try.

image

After the update, the scale on my bandwidth usage chart got blown up so much, you can hardly see the Win8 update – the first step on the x-axis went from ~122kb/s to ~3000kb/s, a nearly 25x increase (time at right side of graph was 12:48pm, I happen to have the mouse hovered near the upper left of the graph when grabbing it, hence the 12:39pm time written on the x-axis line):

image

This result isn’t surprising but it’s painful to look at visually.  It had to download the entire 50MB app.  Is this a huge deal?  Isolated and on an unlimited, high bandwidth connection … no.  But on 3G/4G, a hotel WiFi, or metered connection … Absolutely!  And if you have multiple devices, and are on the road as much as I am, this not only wastes bandwidth but time, as well.  Looking in my app list, there’s another big one in there.  Magic 2013:

imageimage

1.15 GB?  Yikes.  (I feel like Doc Brown … one point fifteen gigabytes?! )  Got multiple devices and/or travelling?  This becomes a real issue.  While it’s not a strictly fair comparison, seeingheadlines like this one illustrates the inefficiency of the system.

I went ahead and hit Update All on the iPad, including Magic, just to watch my internet usage.  Not surprisingly, the original Win8 update is invisible, the Paper app (in the middle) looks less foreboding compared to what continues over the next few minutes…image

Looking at it a day later before I hit publish on this post, we can see this update is quite the spike on my usage (pointing out a Netflix movie in the evening):

image

Finally, here’s my daily usage over the past couple of days – bearing in mind these numbers include all traffic in my home.  Work, VOIP, Netflix, etc.:

image

Needless to say, updating a large number of apps on iOS becomes time and bandwidth consuming.  Win8 can do it right, Android via Smart App Updates (though I haven’t tested it) can do it, but that it’s _still_ absent in iOS6 is a bit surprising.

Published at DZone with permission of Brian Hitney, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)