US typical home
300 Mbit/s down, 60 up, 20 ms added to every round trip. The median of each setup's runs; in brackets, the 90th percentile (one run in ten was slower). The details-screen column is network time only; the first-page column adds the app's own time.
| Storage | Library | First page | Details screen | Wait on a page turn | Pages per second, flipping |
|---|---|---|---|---|---|
| Bunny Storage | Not encrypted | 123 ms (164 ms) | 212 ms | 0 ms (worst 0 ms) | 52.6 |
| Bunny Storage | Encrypted | 141 ms (161 ms) | 210 ms | 0 ms (worst 0 ms) | 52.2 |
| Cloudflare R2 | Not encrypted | 199 ms (279 ms) | 285 ms | 0 ms (worst 0 ms) | 32.3 |
| Wasabi | Not encrypted | 215 ms (239 ms) | 548 ms | 0 ms (worst 0 ms) | 29.2 |
| Cloudflare R2 | Encrypted | 215 ms (273 ms) | 291 ms | 0 ms (worst 0 ms) | 30.1 |
| Wasabi | Encrypted | 233 ms (274 ms) | 532 ms | 0 ms (worst 0 ms) | 31.5 |
| Backblaze B2 | Encrypted | 236 ms (262 ms) | 301 ms | 0 ms (worst 0 ms) | 43.2 |
| Tigris | Not encrypted | 347 ms (431 ms) | 826 ms | 0 ms (worst 0 ms) | 11.5 |
| Backblaze B2 | Not encrypted | 393 ms (447 ms) | 384 ms | 0 ms (worst 0 ms) | 41.5 |
| Tigris | Encrypted | 395 ms (511 ms) | 804 ms | 0 ms (worst 0 ms) | 17.1 |
| Google Drive | Encrypted | 1.1 s (2.2 s) | 1.2 s | 0 ms (worst 15.2 s) | 10.1 |
| OneDrive | Encrypted | 1.1 s (1.3 s) | 1.7 s | 0 ms (worst 0 ms) | 11.1 |
US basic broadband
100 Mbit/s down, 20 up, 35 ms added to every round trip. The median of each setup's runs; in brackets, the 90th percentile (one run in ten was slower). The details-screen column is network time only; the first-page column adds the app's own time.
| Storage | Library | First page | Details screen | Wait on a page turn | Pages per second, flipping |
|---|---|---|---|---|---|
| Bunny Storage | Not encrypted | 158 ms (159 ms) | 347 ms | 0 ms (worst 0 ms) | 19.6 |
| Bunny Storage | Encrypted | 176 ms (182 ms) | 344 ms | 0 ms (worst 0 ms) | 19.4 |
| Wasabi | Not encrypted | 244 ms (288 ms) | 690 ms | 0 ms (worst 0 ms) | 16.1 |
| Cloudflare R2 | Not encrypted | 245 ms (390 ms) | 418 ms | 0 ms (worst 0 ms) | 16.1 |
| Wasabi | Encrypted | 259 ms (315 ms) | 674 ms | 0 ms (worst 0 ms) | 16.8 |
| Cloudflare R2 | Encrypted | 260 ms (304 ms) | 420 ms | 0 ms (worst 0 ms) | 16.1 |
| Backblaze B2 | Encrypted | 265 ms (290 ms) | 425 ms | 0 ms (worst 0 ms) | 18.2 |
| Backblaze B2 | Not encrypted | 346 ms (483 ms) | 481 ms | 0 ms (worst 0 ms) | 18.4 |
| Tigris | Not encrypted | 384 ms (478 ms) | 940 ms | 0 ms (worst 2.1 s) | 12.9 |
| Tigris | Encrypted | 394 ms (429 ms) | 925 ms | 0 ms (worst 0 ms) | 12.9 |
| Google Drive | Encrypted | 1.1 s (1.4 s) | 1.9 s | 0 ms (worst 15.7 s) | 7.4 |
| OneDrive | Encrypted | 1.3 s (1.5 s) | 2.2 s | 0 ms (worst 4.5 s) | 8.7 |
Data centre, no shaping
The server’s own connection, nothing added. The median of each setup's runs; in brackets, the 90th percentile (one run in ten was slower). The details-screen column is network time only; the first-page column adds the app's own time.
| Storage | Library | First page | Details screen | Wait on a page turn | Pages per second, flipping |
|---|---|---|---|---|---|
| Bunny Storage | Not encrypted | 85 ms (88 ms) | 33 ms | 0 ms (worst 0 ms) | 154.4 |
| Bunny Storage | Encrypted | 101 ms (103 ms) | 30 ms | 0 ms (worst 0 ms) | 153.6 |
| Backblaze B2 | Encrypted | 136 ms (179 ms) | 110 ms | 0 ms (worst 0 ms) | 87.0 |
| Backblaze B2 | Not encrypted | 143 ms (266 ms) | 348 ms | 0 ms (worst 0 ms) | 74.1 |
| Wasabi | Not encrypted | 172 ms (188 ms) | 338 ms | 0 ms (worst 0 ms) | 46.5 |
| Wasabi | Encrypted | 186 ms (295 ms) | 330 ms | 0 ms (worst 0 ms) | 47.6 |
| Cloudflare R2 | Not encrypted | 189 ms (269 ms) | 160 ms | 0 ms (worst 0 ms) | 48.7 |
| Cloudflare R2 | Encrypted | 195 ms (246 ms) | 149 ms | 0 ms (worst 0 ms) | 51.0 |
| Tigris | Not encrypted | 314 ms (451 ms) | 653 ms | 0 ms (worst 1.3 s) | 20.3 |
| Tigris | Encrypted | 318 ms (342 ms) | 626 ms | 0 ms (worst 0 ms) | 21.8 |
| Google Drive | Encrypted | 933 ms (8.9 s) | 1.5 s | 0 ms (worst 28.5 s) | 11.6 |
| OneDrive | Encrypted | 1.1 s (1.3 s) | 1.8 s | 0 ms (worst 0 ms) | 12.8 |
What we measured
- The comic. 23 pages of about 517 KB each (11.9 MB), uploaded by the app itself, once as a plain library and once encrypted. Drive libraries are always encrypted, so OneDrive and Google Drive have only the encrypted row.
- One run. Open the comic's details (its page list and previews), tap Read, wait for the first page, then turn a page every two seconds up to page 12. A second run in each round turns every page as soon as it shows, to the last page.
- How many. Up to 20 runs per setup, tested from 2026-09-29 to 2026-09-30, with the services taken in turn so that a slow minute on the network does not land on one of them. Every run starts with new connections. Backblaze B2 stops a free account's downloads after 1 GB a day, and the benchmark reached that cap: it has 10 runs per setup; 40 of its sessions were refused at the cap; 1 more failed (HTTP 500). Failed sessions are in the raw data but not in the medians.
- Where from. A server in Los Angeles. The home and basic tables slow that server's link down to those speeds and add the round-trip time a home connection adds; the data-centre table is the server as it is.
- How. A small program replays exactly the requests the Easemic app makes, in the same order and with the same parallel reads. For S3 storage we checked it request by request against a capture of the app itself; for OneDrive and Google Drive it follows the app's code, including their extra look-ups.
- The app's own time. The first-page numbers include the app's own time to open, decode and draw the page: 72 ms for a library that is not encrypted, 89 ms for an encrypted one (which is also decrypted). We measured it on an Android phone (Honor, Android 17) with the library on a server on the same desk, so the network took almost nothing.
- Stalls. Almost every page turn found its page ready, but not all: Google Drive once waited 28.5 s (Data centre, no shaping); Google Drive once waited 15.7 s (US basic broadband); Google Drive once waited 15.2 s (US typical home). Each time, one slow response from that service held up the next page.
- Regions. Cloudflare R2 placed in western North America, Wasabi in Oregon (us-west-1), Bunny Storage in Los Angeles, Tigris in San Jose (a single-region bucket), Backblaze B2 in its US West region (a Backblaze account picks its region when it is created). OneDrive and Google Drive do not let you choose.
- Not tested. WebDAV services, other US regions, Europe, Asia and mobile data. We test again when the app's reader changes.
Raw data
Every run, one line each: runs.csv.
Questions people ask
Is reading comics straight from cloud storage fast enough?
Fast. On a typical US home connection, the first page was on screen 123 ms after tapping Read with Bunny Storage, and within 215 ms on the three fastest services we tested. Turning a page every two seconds, the median wait for the next page was 0 ms; the longest single wait was 15.2 s, on Google Drive.
Which storage opened a comic fastest?
Bunny Storage: the first page was on screen 123 ms after tapping Read on a typical US home connection (median of 20 runs).
Does encrypting the library slow reading down?
A little: the app's own time to open, decode and draw the first page was 72 ms for a plain library and 89 ms for an encrypted one, measured on an Android phone (Honor, Android 17).
Were WebDAV services such as Nutstore or a NAS tested?
Not yet. This round covered S3 storage, OneDrive and Google Drive; WebDAV is next.