Prefetch consumes bandwidth and battery
Aliases: prefetch cost · data and energy · speculative transfer bill
What it is
Prefetch pulls the next hop’s transfer forward, and the bill comes forward with it: bandwidth and battery are spent before anyone asked for the content. Perceived speed is not free. On cellular, roaming, low battery, or metered plans, the cost prepaid for a click that might happen is real money and a slice of charge. This leaf opens the negative side of the trade. Even high predictability still settles against “how much was fetched, on which network, in which device state”, not against “how much faster it felt”.
Why it happens
A radio stepping from idle to working, another radio round on an already-lit screen, a cellular link kept alive — each has a fixed energy stair. Prefetch often happens while people think they are sitting still reading, and the stair is climbed quietly. Bytes are billed as bytes: prefetched bytes and post-click bytes cost the same in the ledger; the only difference is that prefetch may never be used. A 50% hit rate means paying for three transfers per two next hops. Energy also stacks a timing choice: fetch now or wait for Wi-Fi. On an expensive network, prefetch locks a transfer that might have been cheap later into the expensive window.
Cost also fights the current page. When prefetch fills the pipe, the video playing now and the list scrolling now hitch. What people feel is not a faster next hop but a slower this hop. The bill is in the background, the hitch is in the foreground, and the two are hard to join into “because you were guessing what I would tap”.
Where it stops holding
On an unmetered LAN, while charging, or after the user explicitly chose “preload offline”, the cost is accepted or even requested and this warning yields. A tiny prefetch (a title JSON) and a prefetched HD video are not one ban. OS data-saver and low-power modes are a veto already cast; prefetch should stop or drop to metadata. Preloading a font or script the current page will paint in a moment is paying the current wait’s bill, not a maybe-next-hop’s; do not lump it with speculative prefetch under one “save whenever possible”.
Applying it
- Gate on network and battery: on cellular, roaming or low power, do not prefetch media; metadata at most. Open up on Wi-Fi with charge to spare.
- Give prefetch a budget: unread prefetched bytes in a session have a cap; stop when it is hit rather than betting forever.
- Honour system data-saver / low-power flags as hard off, not as another confirmation dialog.
- How to check: walk a “clever” prefetch path on cellular and low battery, then read data and energy stats. If the next hop never happened and the bytes and radio time were already spent, tighten the gate until that path is off by default.