Give in to Procrastination and Stop Prefetching (2013) [pdf]
people.csail.mit.edu
people.csail.mit.edu
Why can't we spend any effort fixing the root causes of anything and instead treat every early tech as a given and spend so much effort in developing workarounds?
Network effects.
Deploying network infrastructure is the hardest and most expensive element of networking. You want to do it as little as humanly possible, and anything that can be retrofitted on top of already-deployed hardware is an instant winner.
Changing network protocols would likely require hardware replacement all over the place.
Consider, your ISP knows most of this information. For instance, if you have 2 GB of 4G cell service and then it throttles to 3G, then the cell company must have real time info of how much data you have left, or they would not be able to throttle you. They will often give you an app so you can check how close you are to the limit. The only trouble is that there is no STANDARD way to ask them any of this.
So make one up. This is one of the few cases where network effects mostly take care of themselves. Here is a straw man proposal. Feel free to bike shed this. Let's say we extend DCHP so that in addition to giving you the default gateway, it also gives you cost parameters for the current connection, or possibly the IP address of who to ask for the cost.
If the network supports this, the OS can find out when connecting and then provide it to apps via an API. If the network doesn't support it, the OS can still expose the API, but fall back to heuristics such as whether you're on cell or Wi-Fi. Of course, the user typically knows what they are paying, so you should allow them to override the heuristics and supply real data. The apps need not know whether the data came from the network of from heuristics or the user.
The phone itself could easily record the returned file size of all requests within a threshold. My old Note3 has these alerts built in with separate limits for mobile vs wifi.
Able=self-reliance
<Monop/Oligop> Corporation, Inc is not remotely interested in the latter.
It is a source of some frustration that devices connected to a tether will assume 'wifi therefore unmetered' and do all the non-time-critical stuff (such as application updates) that you'd really rather that they do on a genuinely unmetered wifi access point (eg. home cable or ADSL) later on.
I have experimented - in both Debian and Windows 7 - using plugged-in / USB connectivity, but a) it's a bit spotty, b) it means I need a cable connection and that's often not ideal when on the go, c) it doesn't (as noted) work with tablets, and d) it doesn't solve the underlying issue of slave devices thinking they have non-mobile(3g,4g,lte,etc) network connectivity and sucking down lots of data.
In Citymapper I'd like it down download and cache maps when on wifi or when in the uk, but only do the minimum when roaming.
On laptops likewise, sometimes a connection is metered - not just tethered, but wifi on trains/planes, and even some home connections.
Determining when a device is on a metered connection or not is the tricky option, probably inpossible. Perhaps something device manufacturers could incorporate into network settings (a metered/non metreed flag on the connection)
I think that your second sentence contradicts your first. Making the determination automatically is, indeed, probably tricky; but making the determination by consulting a user-set flag is trivial. I'm too wedded to my Mac to commit to a Windows machine, but I love that Windows 10 has such settings (necessary to prevent it from auto-updating), and wish I could make my Mac do it.
Sure, but if you are not on a limited or pay-per-byte data plan, then prefetching a large block block of data so the radio can go into low power mode for a while is more helpful.
> This decision is made based on whether the user is on Wi-Fi or cellular, how many bytes are remaining on the user’s data plan, ...
so it sounds like your scenario is already accounted for and you'd be flagged as a "data-heavy" user, for which prefetching would be enabled.