Insilico Terminal: where its trading screen loses time, and what to fix

Measured from the Netherlands in a logged-in Chrome, October 2026.

In short. On a warm reload the screen is trade-ready after 3.5 s (median of 5 loads), 7 of 27 perpetual trading screens, possible rank 6 to 10; after an uncached reload 3.7 s. The largest bottleneck: The order book is drawn the moment a 0.79 s data request completes. First change to try: Send the request that completes when the book appears together with the first data requests at 1.0 s, or draw the book from the first socket depth message. Likely saving if fixed: About 1 s faster on a warm reload, from 3.5 s to roughly 2.5 s, if the order book and the orders panel get their data when the price does (IN-1, IN-2).

Three measurements appear on this page, and their times differ. Rank and results come from the campaign's timed reloads. The diagnostic capture and the recorded reload are single loads made with recording switched on, which slows the page: read them for the order of events and the gaps, not for totals.

Resultscampaign: 5 warm and 5 uncached reloads

Warm reloadmedian 3.5 s, range 3.5 s–4.0 s; loads: 4.0 s, 3.5 s, 3.7 s, 3.5 s, 3.5 s
Uncached reloadmedian 3.7 s, range 3.4 s–4.0 s; loads: 3.7 s, 3.7 s, 3.4 s, 4.0 s, 3.4 s
Standing7 of 27 by median; possible rank 6 to 10. 1.1 s behind the fastest, Thalex (2.4 s): 1.4 times as long. The possible rank is the range the measurements leave open: it counts only the exchanges that clearly beat this one and those it clearly beats. Exchanges whose ranges overlap cannot be told apart.
Loads ready5 of 5 warm, 5 of 5 uncached
Notesorder book or trades drawn as a picture; checked as drawn and updating, values not read; chart checked as drawn and updating, prices not read; recent trades not measured: left out; measured with an Extended exchange account connected, so its market and account panels show Extended's data

Where the time goescampaign medians, warm reload

Panels in the order they first showed real, usable data on a warm reload. The coloured part of each row is the time that panel added after the one before it. The last row is trade-ready: every panel is ready and the page has stopped moving.

0 s1 s2 s3 s
Price1.7 s
Order form1.8 s +0.1 s
Chart2.5 s +0.7 s
Order book3.2 s +0.7 s
Account panel3.5 s +0.3 s
Trade-ready3.5 s +0.0 s settling

Stack

A trading terminal for other exchanges, measured with an Extended exchange account connected; it draws its book and trades on canvas. From the 3 October recorded warm load.

Delivery

insilicoterminal.com over HTTP/2; a service worker answers the HTML (in 5 ms) and 28 of the 31 scripts. Market and account data come from the connected exchange; the recording masks the data hosts, so it does not show whether the terminal reaches Extended directly or through its own servers.

HostRoleCDN edge seenConnectResponse
insilicoterminal.compage—28 ms27 ms

Median of up to 10 attempts from the test machine. Response time includes the server's own time, so it is not a distance.

What happened, in orderrecorded warm reload 3 October

From one warm reload recorded with Chrome's performance trace on 3 October 2026. Recording slows the page, so read the order and the gaps, not the totals. Some host names were masked when the recording was saved.

WhenWhat
0.005 sHTML arrives from the service worker.
0.11 sTwo Google Fonts stylesheets, each holding up the first paint for about 0.12 s.
0.45–0.65 sA 305 KB (compressed) data response from insilicoterminal.com; older timed loads suggest it is /settings, which unpacks to 7.3 MB.
0.65–1.18 sOne 534 ms main-thread task, in a script from insilicoterminal.com.
1.0–1.76 sFour data requests to the masked data hosts, 0.27 to 0.44 s each.
1.55 sPrice shows.
1.67 sFirst market-data request.
1.85 sOrder form shows.
1.83–2.22 sFirst frames received on a live feed at 1.83 s; first frame sent at 1.99 s and the next one received at 2.22 s.
2.65 sA data request starts; its response arrives at 3.44 s.
2.75 sChart drawn.
3.14 sOrders panel shows.
3.44 sOrder book drawn, as the 2.65 s request completes: trade-ready in the recorded load.

Request waterfallrecorded warm reload 3 October

62 of the 136 requests (the page itself, the longest and the largest) started before trade-ready in the warm reload recorded on 3 October, in start order. The outlined part of a bar is waiting for the server; the solid part is downloading. Rows are numbered so a request can be pointed to. The numbers on the right are the size received and the total time. Vertical lines mark when a panel had data in this capture.

PageScriptData requestStylesheetFont, media, other filewaiting for the serverdownloading

0 s0 s1 s1 s2 s2 s3 s3 s1insilicoterminal.com8 ms2host masked131 ms3insilicoterminal.com4 kB31 ms4insilicoterminal.com23 ms5insilicoterminal.com · tr…28 ms6host masked26 ms7insilicoterminal.com92 ms8insilicoterminal.com92 ms9insilicoterminal.com98 ms10insilicoterminal.com125 ms11insilicoterminal.com125 ms12insilicoterminal.com125 ms13insilicoterminal.com125 ms14insilicoterminal.com122 ms15insilicoterminal.com122 ms16insilicoterminal.com122 ms17insilicoterminal.com122 ms18insilicoterminal.com123 ms19insilicoterminal.com120 ms20insilicoterminal.com119 ms21insilicoterminal.com119 ms22insilicoterminal.com118 ms23insilicoterminal.com118 ms24insilicoterminal.com118 ms25insilicoterminal.com119 ms26insilicoterminal.com119 ms27insilicoterminal.com118 ms28insilicoterminal.com130 ms29host masked47 ms30insilicoterminal.com128 ms31insilicoterminal.com129 ms32insilicoterminal.com128 ms33insilicoterminal.com128 ms34host masked28 ms35insilicoterminal.com4 kB33 ms36insilicoterminal.com305 kB198 ms37insilicoterminal.com4 kB28 ms38host masked1 kB311 ms39host masked1 kB271 ms40host masked204 B31 ms41host masked202 B25 ms42host masked99 B98 ms43host masked204 B43 ms44insilicoterminal.com3 kB34 ms45host masked206 B301 ms46insilicoterminal.com4 kB58 ms47host masked6 kB443 ms48insilicoterminal.com28 ms49insilicoterminal.com28 ms50insilicoterminal.com24 ms51insilicoterminal.com24 ms52insilicoterminal.com27 ms53insilicoterminal.com27 ms54insilicoterminal.com27 ms55insilicoterminal.com27 ms56insilicoterminal.com27 ms57host masked31 ms58host masked17 ms59host masked4 kB232 ms60host masked8 kB789 ms61host masked1 kB267 ms62host masked1 kB724 msprice 1.5 sorder book 3.4 schart 2.8 s
Download this figure as an image:

Bottlenecks and fixes, largest firstrecorded warm reload 3 October

IN-1The order book is drawn the moment a 0.79 s data request completes.grade C
Evidence
A request to a masked data host starts at 2.65 s and its 7.6 KB response arrives at 3.44 s; the book is drawn at 3.44 s. A live feed had been delivering since 1.83 s, 1.6 s earlier. One recorded load: the match in time suggests the book waits for this request, but does not prove it.
Gap observed
0.79 s for the data request that completes when the book is drawn
Holds back
Book (median 3.2 s in the timed loads).
Fix
Send the request that completes when the book appears together with the first data requests at 1.0 s, or draw the book from the first socket depth message.
Where
Book panel data start-up: the request that starts at 2.65 s in the recording.
Verify
DevTools → Network, sorted by start time: the request that ends when the book appears starts before 1.5 s. DevTools → Performance: book paint within 200 ms of the first depth message.
Likely saving
Unknown: the request takes 0.79 s and starts 1.6 s after the first data requests
IN-2The orders panel is the last panel in every warm timed load.grade C
Evidence
Campaign warm reloads: the orders panel finished last in 5 of 5, median 3.5 s; the order book 3.2 s, the chart 2.5 s, the price 1.7 s. Uncached: orders last in 4 of 5. In the recorded load the order is reversed: orders at 3.14 s, book at 3.44 s. The recording masks the data hosts, so it does not show which request the panel waits for.
Gap observed
0.35 s between the order book median and the orders panel median
Holds back
The orders panel (median 3.5 s in the timed loads), and with it trade-ready.
Fix
Find the request the orders panel waits for and send it with the first data requests at 1.0 s, not after the market panels.
Where
Orders and positions panel data start-up.
Verify
Reload with DevTools → Network open: the orders panel fills before the order book, not after it.
Likely saving
Unknown; the orders median is 0.35 s after the book median
IN-3The first ticker request goes out only at 1.7 s.grade C
Evidence
First ticker-class request at 1.67 s and first frame sent on the socket at 1.99 s, although the HTML is there at 5 ms and the last script starts at 1.65 s. Four other data requests to masked hosts start at 1.0 s; the recording does not show what they fetch.
Gap observed
1.67 s between HTML arrival and the first market-data request
Holds back
Every panel: nothing is shown before this ends.
Fix
Open the socket and subscribe from the first script, not after the app has started.
Where
Feed client start-up.
Verify
DevTools → Network → WS: the first subscription frame is sent before 0.5 s.
Likely saving
Unknown
IN-4The main thread is busy for 0.83 s before the first panel, right after a 7.3 MB settings response.grade C
Evidence
Five long tasks total 0.83 s before the price shows at 1.55 s. The longest, 534 ms, starts at 0.65 s, the moment a 305 KB (compressed) response from insilicoterminal.com finishes. All 20 older timed loads show one request of that size, insilicoterminal.com/settings, which unpacks to 7.2–7.3 MB. The recording attributes the task to a script from insilicoterminal.com but not to a function, so the link between the response and the task is by timing only.
Gap observed
0.83 s of main-thread time before the first panel
Holds back
Every panel: nothing is shown before this ends.
Fix
Check with a start-up profile whether the 534 ms task is the handling of the /settings response; if so, send less in /settings (7.3 MB unpacked) or parse it in a worker.
Where
The /settings endpoint and the script that handles its response.
Verify
DevTools → Performance: no task over 200 ms before the price shows; Network: /settings well under 1 MB unpacked.
Likely saving
Unknown until profiled; the task is 0.53 s
IN-5The recent-trades canvas stays blank for 45 s in most loads.grade B
Evidence
In the campaign the trades panel drew nothing in 9 of 10 loads; it was left out of the checklist for this campaign.
Gap observed
45 s with the recent-trades canvas blank
Holds back
The recent-trades panel, which is not in the timed checklist.
Fix
Check the trades canvas subscription: it stays empty on most loads.
Where
Recent-trades panel.
Verify
Reload 10 times: trades appear within a few seconds every time.
Likely saving
None on trade-ready: a correctness fix
IN-6Two Google Fonts stylesheets block the first paint.grade B
Evidence
Two stylesheets from fonts.googleapis.com each block rendering for about 0.12 s (124 and 123 ms), although both come from the browser cache.
Gap observed
0.12 s of render blocking for each of two stylesheets
Holds back
The first paint, not a trading panel.
Fix
Serve the font CSS from insilicoterminal.com or inline it, with font-display: swap.
Where
The two fonts.googleapis.com stylesheet links in the HTML head.
Verify
DevTools → Performance → Insights: no render-blocking request to fonts.googleapis.com.
Likely saving
Small; first paint only
IN-7Large images, a 0.9 MB font and 5.5 MB of route script load with the trading screen.grade B
Evidence
An older timed load (the recording masks file names): seven background images under /card-bg/ total 2.8 MB (BG-3.png alone 1.9 MB), requested at 1.6–1.7 s; the font Inter-VariableFont_opsz_wght-c8O0ljhh.ttf is 875 KB as uncompressed TTF; main-CN527iUI.js is 3.1 MB unpacked and Trade-DI0U4JDP.js 2.4 MB. A service worker serves most of these on a warm reload, so the cost is mostly on a first visit.
Measured
2.8 MB of background images and a 0.9 MB font
Holds back
Not established: the captures do not show which panel waits for this.
Fix
Convert the card backgrounds to a modern format and load them where they are shown; ship the font as a WOFF2 subset.
Where
The /card-bg/ images and the font file in the app build.
Verify
DevTools → Network on a first visit: no /card-bg/ request on the trading screen; the font is woff2.
Likely saving
Small on a reload; about 3.5 MB less on a first visit
IN-8One worker script is requested 16 times, and the market status twice.grade C
Evidence
All 20 older timed loads: /assets/SlaveWrapper-azUJVPJl.js appears 16 times per load (1.76–1.79 s in one), and the status request for the market (jp.td.insilicoterminal.com/status/extended/…) two or three times, each taking about 0.95 s (1.48–2.43 s). The script comes from the cache; the count suggests 16 workers are started.
Measured
one script requested 16 times and one status request sent two or three times per load
Holds back
Not established: the captures do not show which panel waits for this.
Fix
Check how many workers the trading screen needs at start-up, and share one status request.
Where
The worker pool that loads SlaveWrapper; the callers of /status/extended.
Verify
DevTools → Network, filter "SlaveWrapper" and "status/extended": the number of requests at start-up.
Likely saving
Unknown

Grade B: the capture shows the problem directly. Grade C: the order of events in the capture points to it; the dependency is for the team to confirm. The order is our judgement of each finding's effect on trade-ready, largest first; it is not sorted by gap. A gap is the time between two observed events or the time one piece of work takes; gaps overlap and do not add up. Where a finding is about size or count and no time was measured, the row says what was measured instead. Holds back names the panel the finding delays. Nothing here is graded higher, because no fix was confirmed by changing a page and measuring again.

Savings are estimates from the timeline, not measured after a change. They overlap, so they do not add up; the summary gives the combined estimate.

How this was measured

Timings: 5 warm and 5 uncached reloads in a seeded random order across all exchanges, each judged against a checklist frozen for this page before the campaign (this page's stored loads were scored again afterwards with one change: the recent-trades panel was left out); trade-ready is the first moment every checklist panel shows real data, nothing is still loading, and the layout holds still for 0.5 s. The findings on this page come from separate recorded loads, which are never part of the timings. Full method.