This finding examines the sustainability of bundling
and storage partitioning in web development.
Bundling dependencies into a single file can improve efficiency,
but it results in repeated downloads of resources,
negatively impacting end-user experience.
Partitioning client-side storage by origin
benefits user privacy and security
but increases storage, energy consumption, and bandwidth costs.
The finding suggests experimenting with smart delays
for cache fetches and bundling with delta transport as potential mitigations.
The finding highlights the need for awareness
of the hidden costs and sustainability risks
and the benefits of reusing client-side resources.
This document is an early draft and does not reflect the consensus of the TAG.
## Introduction
Improvements in both the performance and efficiency of modern computers,
combined with tremendous advances in optimizations
within web browsers have made it possible to run
large web applications while providing
a near-native user experience and performance.
This allowed developers to essentially move towards
a development pattern that enables code re-use from many small packages.
The downside of the agility gained by this pattern is that
when this practice was first introduced,
transporting many small files was not efficient,
and modules were not readily available.
Bundling all of these dependencies into a single file
and compressing it became a common practice
for both transport efficiency and easier dependency management,
analogous to static linking in native development.
The unfortunate side effect of this practice is that
it results in the user having to download duplicate code,
as the browser is unable to determine
if a given bundle contains a specific library.
Additionally,
various privacy and security issues identified with client-side storage mechanisms
have been mitigated by the introduction of storage partitioning,
also known as double-keying. [[PARTITIONING]] [[COSI]] [[TIMING]] [[XS-LEAKS]]
While necessary,
this has had the negative effect
of increased transport costs.
The repeated downloads of resources
can mean increased delay, energy consumption, storage bloat, and data cost
to the end user.
## Transport Sustainability on the Web Platform
We want to increase broader community awareness
of the hidden costs and sustainability risks
introduced by bundling and storage partitioning.
Neither transport nor computation is free;
these are costs that both the content provider and the user ends up paying.
Also, different user populations
pay different comparative costs for transport.
Having to download chunks of code that are largely duplicated
repeatedly is detrimental to the end-user experience.
A simple thought experiment would be to think about
how many times jQuery has been downloaded since its introduction;
and how much we could have saved users in data packet fees
if there was some level of re-use on the client side.
## Benefits and Costs of Storage Partitioning
The effort to partition all client-side storage mechanisms
began [in 2013](https://bugs.webkit.org/show_bug.cgi?id=110269).
There are two kinds of attacks that storage partitioning mitigates:
1. Without storage partitioning,
Site A can infer that a user has visited Site B,
and can discover state from Site B specific to the user,
by embedding resources from Site B. [[COSI]] [[TIMING]] [[XS-LEAKS]]
2. Without storage partitioning,
a site that provides a service to many other sites
by being embedded onto them
can track users across those sites. [[PARTITIONING]]
Storage partitioning has been quite successful
at addressing these attacks,
but the tradeoffs made are considerable.
Loading resources separately for each origin results in:
- Lessened benefit of different websites loading shared resources from
a CDN,
which is not well understood by developers.
- Additional storage space is required to store these cached resources.
- Additional packages are transferred over the wire,
which, in many scenarios, can be an actual financial burden for users.
- Additional energy is consumed as extra CPU cycles are used for decoding, parsing, and executing resources.
- Additional bandwidth used must be paid for by users, intermediaries, and content providers.
## The Hidden Cost of Bundling
Bundling lowers latency, lowers the transport cost by reducing the number of
requests and makes the package atomic,
but the hidden cost is the unused payload
and the recurring cost of it during an update.
There is also the inherent risk of “write amplification”,
where even a single byte change in a web application requires
downloading the entire application from scratch.
There is a definite cost associated with this,
both from the end of providing the application,
as well as receiving the application.
When HTTP/2 [[RFC9113]] was introduced, attempts were made to alleviate the need for bundling using Server Push, but the performance gain was not noticeable enough to justify the complexity cost.
The introduction of HTTP/3 [[RFC9114]], based on QUIC [[RFC9000]] may provide new solutions to these issues.
## Angles for Experimentation
We cannot compromise on the security and privacy guarantees that double keying provides.
Additionally, no immediate replacements provide equivalent conveniences and functionality
that bundling provides as of the time of writing.
If we move the ecosystem to be unbundled, the cost of transport will go up.
However, we cannot simply remove double keying to alleviate that cost.
One potential way forward could be to experiment with mechanisms that
emulate the effects of double-keyed caching through a software layer
but not necessarily trigger the wire transport.
One potential avenue could involve a noising layer on top of a single-keyed cache,
which adds enough noise to prevent attacks that rely on timing (e.g., artificial delays)
or metadata (e.g., adding noise in latent state).
## Call to Action
Unfortunately, the solution to this is largely an unsolved problem
and the web platform does not yet have all the machinery needed to solve this problem.
We would like to see experts from the community
to experiment with different approaches to find a more sustainable solution
and eventually propose a solution that reduces the costs
while preserving the security and privacy guarantees we have today.