How it was measured
Each build is made only with its own engine’s tools. The images are the same and at their original size, the game logic repeats the Unity original, and the physics is Box2D everywhere: built into the engine for ScopeBee, Defold, Unity and Cocos, and Planck.js — a JavaScript port of Box2D — for the three frameworks, which have no Box2D of their own.
Load times were measured on a local server that serves everything in brotli: a ready-made .br file where the build has one, brotli at quality 11 where it does not, compressed in advance so that compressing takes no time during the load. The point was to keep the speed of the internet connection out of the results: over a real network the download time changes from run to run and would bury the difference between the engines.
Results
| Metric | Engines, best first |
|---|---|
| Transferred |
|
| Resources |
|
| First frame |
|
| Heap Snapshot |
|
Play the builds: ScopeBee Cocos Creator Defold Unity Phaser Pixi PlayCanvas
- Transferred — what the browser downloads, compressed.
- Resources — the same files after decompression.
- First frame — the time from opening the page to the first frame the engine draws, download included.
- Heap Snapshot — the memory the page holds, as Chrome DevTools shows it under Memory → Heap snapshot; Web Workers are not part of it.
Why Phaser and Pixi download less
Because they carry less. Pixi is only a rendering library: it draws sprites and leaves everything else to you. Phaser is only a 2D engine.
Playable builds
A playable ad is the same game as one HTML file with the engine, the assets and the script inside it. Only the engines that can produce one are compared here, and none of the builds was optimised further: ScopeBee, Cocos Creator and Defold come out of their own playable modes, Pixi and PlayCanvas are the same web projects as above, packed into a single file. Unity has no such mode.
| Metric | Engines, best first |
|---|---|
| HTML file |
|
| Transferred |
|
| Resources |
|
| First frame |
|
| Heap Snapshot |
|
Play the builds: ScopeBee Cocos Creator Defold Pixi PlayCanvas
- HTML file — the file on disk: what goes to the ad network and what its size limit is checked against.
The other rows mean the same as in the table above. Each figure is one cold load read off Chrome DevTools; Transferred is what actually came over the network — for Pixi and PlayCanvas the DevTools total also counts the data URIs these pages read from themselves through fetch(), which never touch the network.
A note
The site serves these builds differently from the test server, so a stopwatch here will not match the table: the difference is the network, not the engine.