Lobby image inventory

gc.kimbaba.com.tw/Lobby · desktop web view 1864×863, DPR 1 · measured 2026-07-23
Requests counted in-browser via PerformanceResourceTiming; every file then re-fetched server-side to read true byte size and pixel dimensions from its header.

Headline numbers

625
image requests
530
unique files
31.59 MB
unique payload
36.48 MB
incl. duplicate requests
95
duplicate requests
4.89 MB
wasted on duplicates
414 MB
decoded image RAM
127.20 MB
RAM saved at 384px, no quality loss
The headline problem is pixel dimensions, not file count. 405 of the 530 files are 480 × 480 game icons. Below the 500 px breakpoint the lobby sizes them with width: 27.2vw, so the physical pixels an iPhone needs is viewportWidth × 0.272 × DPR — and the worst case across the entire iPhone range is 359 px (16 Pro Max). Even the largest, densest iPhone is handed about a third more pixels than it can show. Dropping to 384 × 384 takes game icons from 353 MB to 226 MB of decoded RAM with no visible change.

Weight by purpose

CategoryFilesUnique bytes Incl. dupes ≈
Game icons40221.67 MB24.45 MB
Event banners704.15 MB6.22 MB
Feature modules213.98 MB3.98 MB
App UI281.67 MB1.67 MB
Trackers / misc90.11 MB0.16 MB
Total53031.59 MB 36.48 MB

Dimension distribution — how many distinct sizes are actually in play

Pixel sizeFilesBytes
480 × 48040521.84 MB
1200 × 600262.22 MB
600 × 300230.87 MB
800 × 400100.53 MB
400 × 20080.16 MB
240 × 8080.02 MB
144 × 14460.04 MB
312 × 62463.57 MB
1 × 140.00 MB
720 × 72040.45 MB
640 × 16040.08 MB
1008 × 19230.17 MB
72 × 7220.02 MB
80 × 8020.01 MB

Game icons by provider — 402 files, 21.67 MB

ProviderIconsBytes
BNG1648.72 MB
QT884.57 MB
CQ9422.43 MB
RSGSW140.74 MB
TAG100.68 MB
BL120.58 MB
VA90.55 MB
GIO110.53 MB
FC70.43 MB
OSEG70.40 MB
ATG70.40 MB
RK550.32 MB
FVG40.22 MB
BLE30.17 MB
KBB30.16 MB
ZG30.16 MB
RG30.14 MB
YB30.14 MB
BOD20.11 MB
BT20.11 MB
I820.10 MB
SYSGAME10.04 MB

What the duplicates actually cost — and what they do not

93 URLs are fetched more than once in a single load, for 95 redundant requests and 4.89 MB of avoidable transfer — 13% of everything the page pulls down.
Where the duplication happensURLs Wasted transfer
Game icons502.78 MB
Event banners392.07 MB
Trackers / misc40.05 MB

The damage

What duplicates do not cost

They do not double memory. The browser keys its decoded-bitmap cache by URL, so a file requested three times is still decoded once and held once. That is why the 414 MB decoded-RAM figure above is driven entirely by pixel dimensions, not by the duplicate count. Fixing duplicates is a bandwidth and latency win; fixing dimensions is the memory win. They are separate problems and both are worth doing.

Where they come from

A single Set over the merged preload list, plus dropping either the <img> or the CSS copy of each banner, removes essentially all of it. No rendering changes required — the same pixels end up on screen.

Memory cost on iPhone — the platform that actually hurts

476 <img> elements decode to 414.6 MB of RGBA bitmap. A decoded image costs width × height × 4 bytes in RAM no matter how well it compresses — so a 56 KB WebP at 480 × 480 occupies 0.88 MB of memory, about 16× its file size. That figure is identical on every device, because it depends on the source pixels, not the screen. A desktop shrugs it off; an iPhone WebView does not.

How big is a game icon on an actual iPhone?

Below the 500 px breakpoint the lobby sizes every icon with .gameCard-area .s-card { width: 27.2vw } — a fraction of viewport width, not a fixed box. So the physical pixels an icon needs is viewportWidth × 0.272 × devicePixelRatio. Every iPhone in portrait is under 500 px, so all of them use this rule. (At ≥ 500 px it becomes a fixed 145 px, and 128 px on desktop.)
iPhoneCSS widthDPR Slot (CSS px)Pixels needed share of the 480 px shipped
iPhone SE (3rd gen), 8375102204
iPhone 11, XR414113225
iPhone 13 mini375102306
iPhone 14, 13, 12390106318
iPhone 16, 15, 14 Pro393107321
iPhone 15 Pro Max, 14 Pro Max430117351
iPhone 16 Pro Max440120359
The worst case across the whole iPhone range is 359 physical pixels (16 Pro Max: 440 × 0.272 × 3). Every icon ships at 480 × 480. So even the largest, densest iPhone is being handed about a third more pixels than it can display — and every other iPhone considerably more than that.

What each option costs and saves

File sizes below are measured, not estimated: 60 random 480 × 480 icons were downloaded, resized with Lanczos and re-encoded as WebP. Quality 80 was chosen because re-encoding the originals at 480/q80 lands at 94% of their current size — i.e. the source files sit at roughly q82, so q80 is a like-for-like comparison rather than a quality cut. Downscaling never blurs; only upscaling does. Any row whose pixel count meets 359 is visually lossless on every iPhone.
Ship atVerdictAll 402 icons on disk Decoded RAMRAM savedWhy
480 × 480Today21.67 MB353.32 MBships as-is
384 × 384Recommended14.82 MB226.12 MB−36%covers every iPhone incl. 16 Pro Max, with headroom
360 × 360Tighter13.67 MB198.74 MB−44%exactly covers the 359 px worst case, no headroom
320 × 320Aggressive11.49 MB157.03 MB−56%1.12× upscale on Pro Max only — barely perceptible
256 × 256Too far8.36 MB100.50 MB−72%1.40× upscale on every DPR-3 iPhone — visibly soft
Recommendation: 384 × 384. It is exactly 3× a 128 px slot, clears the 359 px worst case with room to spare, and is visually identical on every iPhone because nothing is ever upscaled. Measured result: game icons drop from 21.67 MB to 14.82 MB on disk and from 353.32 MB to 226.12 MB in decoded RAM — a 127.20 MB memory saving on the exact platform you care about, with no visible change.
If you want to push further, 320 × 320 saves 196.29 MB of RAM and only upscales on Pro Max models, by 1.12× — in practice imperceptible on a 3× display. 256 × 256 is too far: it upscales 1.40× on every DPR-3 iPhone, which is where softness starts to show. An earlier draft of this report recommended 256 based on a desktop DPR-1 measurement; that was the wrong baseline and is corrected here.
Best of both: a srcset with 256 / 384 variants lets DPR-1 and DPR-2 devices take the small file while DPR-3 iPhones take the large one — no device over-fetches, and nothing is ever upscaled.

Other ways to cut memory

Findings

Coverage check — was anything missed?

The inventory is built from PerformanceResourceTiming, which is the same set the DevTools Network panel shows, including cache hits. Three cross-checks were run against a fresh load to confirm nothing slipped past the filter: Counts vary by a few images between loads because the promo carousel and popup rotate; this inventory is one representative load.

All 530 site images — grouped into categories; filter, sort and resize with the controls