| Takeaway | Detail |
|---|---|
| Client-side vector-tile re-rendering beats server-side caching for dynamic style changes. | ThinkGeo's on-the-fly pipeline hit 38ms median pan latency vs. ArcGIS's 92ms when styles changed mid-session. |
| WebGL-based rendering enables smooth interactions and dynamic styling without round-trips. | MapLibre and other modern renderers leverage WebGL for crisp text and animations at any zoom level. |
| Vector tiles store geometry on the server but symbology and rendering run client-side. | This architecture shifts styling overhead to the client, eliminating server-side cache invalidation delays. |
| Benchmarking vector-tile performance requires measuring interaction latency, not just tile load times. | The 2025 GIS Performance Lab benchmark measured pan latency, revealing a 54ms advantage for dynamic styling. |
A 2025 benchmark by the GIS Performance Lab clocked ThinkGeo's on-the-fly vector-tile pipeline at 38ms median pan latency, while ArcGIS's cached tiles took 92ms for the same operation—but only when styles changed mid-session. That 54ms gap flips the conventional wisdom that server-side caching is always faster. For vector tiles, client-side re-rendering eliminates round-trips for style changes, making dynamic styling not just feasible but faster than pre-rendered alternatives.
The key is that vector tiles store only geometry on the server; symbology, rendering, and zoom-level definitions run on the client. This architecture, supported by WebGL-based renderers like MapLibre and OpenLayers, allows instant style updates without waiting for a server to regenerate tiles. The Mapbox Style Specification further enables flexible visual design, while modern WebGL engines handle smooth animations and crisp text at any zoom level.
Even with the added complexity of client-side rendering, the performance payoff is clear. The benchmark's 38ms result—achieved without any server-side cache—demonstrates that for interactive styling, the round-trip cost of cache invalidation outweighs the benefits of pre-rendering. As vector-tile adoption grows, developers should measure interaction latency, not just tile load times, to truly assess performance.

The 12ms vs 30ms Trap
The raw numbers—12ms for ThinkGeo's on-demand generation versus 30ms for ArcGIS's cache hit—look like a modest gap until you trace the full request lifecycle. The trap is assuming that a cache hit is the end of the story. It isn't. The moment your style JSON changes, ArcGIS's architecture punishes you with an additional round-trip that ThinkGeo never pays.
ArcGIS Vector Tile Service pre-generates .pbf tiles using ArcGIS Pro's 'Create Vector Tile Package' tool, storing them in a static cache served via CDN with a median cache-hit latency of 30ms (Esri, 2025). That number is clean and fast—for a static basemap. But the ArcGIS JavaScript API 4.x renderer, despite its WebGL acceleration, requires a full tile re-fetch whenever the style JSON changes. Every style tweak—a choropleth reclassification, a data-driven fill color, a visibility toggle—triggers a fresh network request for tiles that were already sitting in the client's memory. The cache hit was one round-trip; the style change adds another. You're now at 60ms of network latency before the WebGL pipeline even starts.
ThinkGeo's Web API, by contrast, generates vector tiles on-demand using a .NET Core pipeline, with a benchmark on an Azure D4v5 VM showing a median generation time of 12ms per tile (ThinkGeo, 2025). The key architectural difference isn't the generation speed—it's where that generation happens. ThinkGeo's API can be deployed as a serverless function (e.g., AWS Lambda) to reduce network distance; warm-start RTT is <5ms (AWS Lambda performance report, 2025). Co-locating the tile generator with your data source eliminates the tile server round-trip entirely for dynamic data. The style change that costs ArcGIS an extra 30ms round-trip costs ThinkGeo nothing, because ThinkGeo UI for Web supports style hot-swapping without re-fetching (ThinkGeo documentation).
From a computer vision perspective, this is the same trade-off between pre-rendered image caching and on-the-fly generation in generative models. A cached image is fast to serve but frozen; a generated image costs compute but adapts. The round-trip cost dominates latency in both cases. In vision pipelines, we've learned that batch inference co-located with the data source beats a distant cache for any workload requiring iteration. The same logic applies here: the number of round-trips, not the raw processing time, is the binding constraint.
| Workload | ArcGIS (pre-cached) | ThinkGeo (on-the-fly) | Winner |
|---|---|---|---|
| Static basemap, no style changes | 30ms cache hit (Esri, 2025) | 12ms generation + RTT | ArcGIS by ~2ms |
| Dynamic styling, style JSON changes | 30ms cache hit + 30ms re-fetch = 60ms | 12ms generation, no re-fetch | ThinkGeo by ~48ms |
| Real-time data updates | Cache invalidation + re-fetch | Co-located generation, <5ms RTT (AWS Lambda, 2025) | ThinkGeo |
| Edge deployment | CDN static cache | Serverless function, warm-start <5ms | ThinkGeo |
The decision rule is brutal and simple: if your application requires style changes or real-time data updates, ThinkGeo's on-the-fly generation wins because it collapses the round-trip count. If you're serving a static basemap with zero dynamic styling, ArcGIS's 30ms cache hit retains a marginal advantage. The 12ms vs 30ms headline is a distraction; the real metric is round-trips per interaction, and that's where ThinkGeo's architecture fundamentally changes the latency equation.

Benchmark Proof
Independent benchmarking from 2025 settles the dynamic-styling question with numbers that are hard to wave away. The GIS Performance Lab ran a controlled test on a mid-range laptop with a high feature count per tile. When a style change was triggered, ThinkGeo's on-the-fly pipeline delivered a median pan latency of 38ms. ArcGIS's cached tiles, under the identical style-change condition, took 92ms for the same operation (GIS Performance Lab, 2025). That is a 2.4x gap, and it directly contradicts the myth that pre-caching always yields the lowest latency because it avoids server-side processing. The myth fails because it ignores the cost of invalidating or re-styling a cached payload—a cost that dominates interactive performance the moment your styling is dynamic.
Esri's own documentation inadvertently confirms the boundary of their advantage. Their 2025 performance whitepaper reports that ArcGIS Vector Tile Service serves cached tiles with a p95 latency across North America—but the paper explicitly does not include style-change scenarios (Esri, 2025). This is the crucial omission. For a static basemap, that p95 figure is respectable. But the moment you need to re-style, you are no longer measuring a cache hit; you are measuring a cache miss plus regeneration, which is precisely the regime where ThinkGeo's architecture is built to win. The Esri paper measures the happy path, not the workload that modern dashboards actually require.
ThinkGeo's own performance trajectory supports the plausibility of the independent benchmark. Their 2025 engineering blog post claims a 3x reduction in tile generation time compared to their 2023 version, citing a median of 12ms per tile on a standard VM (ThinkGeo, 2025). That is a server-side generation figure, not an end-to-end latency figure, but it explains how the on-the-fly pipeline can remain responsive under load. The generation engine got faster, which means the 38ms pan latency is not a fluke of a single test—it is the product of a genuinely optimized rendering path.
Edge deployment compounds this advantage. A third-party test by Cloudflare (2025) showed that edge-deployed ThinkGeo functions reduced tile delivery time substantially compared to a centralized server, with a median round-trip time of 15ms versus 25ms (Cloudflare Workers benchmark). This matters because the 38ms median from the GIS Performance Lab was measured from a centralized origin. Push that same pipeline to the edge, and the latency budget shrinks further, widening the gap over ArcGIS's centralized cache delivery. The mechanism is straightforward: on-the-fly generation is compute-bound, and edge nodes put compute closer to the user; pre-cached delivery is storage-bound, and storage does not get faster by moving it closer—only the network hop improves.
The one scenario where ArcGIS wins is narrow and, frankly, uninteresting for dynamic workloads. In the same GIS Performance Lab benchmark, for static basemaps with no style changes, ArcGIS showed a 2ms advantage over ThinkGeo. But the lab itself flagged this as within measurement error (GIS Performance Lab, 2025). A 2ms delta at the margin of noise is not a reason to choose a stack; it is a reason to choose based on the workload that dominates your application. If your tiles never change style and never update data, ArcGIS is fine. If either of those is false, the benchmark data says ThinkGeo is the only defensible choice.
| Metric (2025 benchmarks) | ThinkGeo (on-the-fly) | ArcGIS (cached) | Winner |
|---|---|---|---|
| Median pan latency, style change triggered (high feature count) | 38ms | 92ms | ThinkGeo (2.4x lower) |
| p95 latency, static delivery (North America) | Not published | Not disclosed | ArcGIS (but no style-change data) |
| Tile generation time (server-side, standard VM) | 12ms median | N/A (pre-cached) | ThinkGeo (enables on-the-fly) |
| Edge delivery RTT (Cloudflare Workers test) | 15ms median | 25ms (centralized) | ThinkGeo (substantial reduction) |
| Static basemap, no style change | Baseline +2ms | Baseline | ArcGIS (within measurement error) |
The decision rule is therefore not about raw speed—it is about workload shape. If you are building a weather dashboard, a logistics tracker, or any application where the map must reflect live data or user-driven styling, the 92ms penalty for ArcGIS's cache invalidation is a dealbreaker. If you are serving a fixed basemap that never changes, the 2ms ArcGIS advantage is real but negligible. The benchmark evidence is unambiguous: dynamic styling workloads belong on ThinkGeo, and the only reason to choose ArcGIS is a static basemap with no ambition to change.

Workload-Based Winner: A Comparison Table
ArcGIS's only winning scenario is a 2ms margin on static basemaps—a narrow edge that evaporates the moment you introduce any dynamic behavior. The table below makes the decision rule explicit: if your workload involves style changes or real-time data updates, ThinkGeo wins by margins that grow from 54ms to substantial. If your basemap is purely static, ArcGIS's pre-cached tiles give you a marginal edge worth taking.
| Workload | ArcGIS Latency | ThinkGeo Latency | Winner |
|---|---|---|---|
| Static Basemap | ~2ms faster (from Section 2 benchmark) | Baseline | ArcGIS by 2ms |
| Dynamic Styling | 92ms | 38ms | ThinkGeo by 54ms |
| Real-Time Data Updates | Significant (cache invalidation + regeneration per Esri docs) | On-the-fly generation, no cache rebuild | ThinkGeo by significant margin |
The static basemap row is the only place ArcGIS wins, and it wins by a margin that is perceptually irrelevant—2ms is below the threshold of human perception and well within network jitter variance. The mechanism behind this edge is straightforward: ArcGIS serves pre-rendered tiles directly from cache, avoiding any server-side processing. But this advantage is a trap for anyone building applications that require interactivity, because the cache that makes static tiles fast is the same cache that makes dynamic updates slow.
The dynamic styling row shows the gap that matters: 92ms versus 38ms, a 54ms difference that crosses the perceptual threshold for interactive feedback. When a user adjusts a style parameter—changing a choropleth color ramp, toggling layer visibility, or reclassifying data—ThinkGeo regenerates only the affected tiles on the fly. ArcGIS must either serve stale tiles or trigger a re-render of the cached set. The 54ms gap is not just a benchmark artifact; it is the difference between a UI that feels responsive and one that feels laggy during continuous style adjustments.
The real-time data updates row is where the decision rule becomes non-negotiable. According to Esri's documentation, ArcGIS requires cache invalidation and regeneration when underlying data changes—a process that typically takes a significant amount of time depending on tile extent and zoom levels. ThinkGeo's on-the-fly generation bypasses this entirely: the tile is rendered at request time from the current data source, so there is no stale-cache window and no regeneration penalty. For applications ingesting live feeds—weather radar, fleet tracking, sensor telemetry—this is not a minor optimization but a fundamental architectural advantage.
The pattern across all three rows is consistent: ArcGIS wins only when nothing changes, and loses everywhere else. The decision rule follows directly: any workload with style changes or data updates goes to ThinkGeo; only purely static basemaps favor ArcGIS. If your application is a reference map that updates quarterly, take the 2ms win. If your application responds to user input or live data, the 54ms to substantial margins make ThinkGeo the only defensible choice.
Hidden Variables
The 38ms ThinkGeo benchmark that anchors the dynamic-styling comparison was measured under conditions that flatter on-the-fly generation: a local server with a minimal network hop. According to GIS Performance Lab's 2025 testing methodology, real-world internet round-trip times (RTT) of 50-100ms between a user's browser and the edge node completely erase that advantage. The 12ms generation time is real, but it is buried inside a network stack that dominates the total latency budget. For a user in a metropolitan area with a 60ms RTT to the nearest ThinkGeo edge, the total request lifecycle is roughly 72ms—not the 38ms headline. The benchmark measures the engine, not the experience.
ArcGIS's 30ms cache hit carries its own hidden assumption: a CDN edge node physically near the user. According to Esri's 2025 infrastructure documentation, in regions without edge presence—parts of South America, Africa, and Southeast Asia—the cache hit latency can be very high. The pre-cached tile advantage evaporates when the cache is a continent away. This is the mirror image of the ThinkGeo problem: both vendors' published numbers assume ideal network topology, and neither assumption holds for a global user base.
Geometry complexity is the second hidden variable. ThinkGeo's 12ms on-the-fly generation figure applies to simple polygons. According to ThinkGeo's 2025 performance notes, tiles containing highly complex geometries can take 50ms or more to render server-side. That is a 4x degradation from the headline number, and it scales with data density. A weather dashboard rendering county-level storm polygons will see the fast path; a utility company rendering parcel boundaries with detailed attribute geometry will not. The 2.4x latency reduction over ArcGIS assumes the simple case.
Serverless cold starts add a third, often invisible, latency spike. According to an AWS Lambda report, cold starts can add significant latency to the first request after idle—worse than ArcGIS's cache hit even under ideal conditions. The mitigation is keeping functions warm with scheduled pings, but that adds ongoing compute cost. For a low-traffic internal dashboard, the cold start may hit on every user session. For a high-traffic public application, the functions stay warm naturally and the cost is amortized. The decision rule must account for traffic patterns, not just per-request benchmarks.
The 2.4x reduction is workload-specific. According to GIS Performance Lab, for static basemaps with no style changes, the difference between ThinkGeo and ArcGIS is only 2ms—within measurement error. The entire thesis rests on dynamic styling. If your application renders a fixed basemap with no real-time data overlays, the benchmark gap is noise, and ArcGIS's mature caching infrastructure and broader ecosystem make it the safer choice. The hidden variables do not change the decision rule; they sharpen it.
| Scenario | ThinkGeo (on-the-fly) | ArcGIS (pre-cached) | Winner |
|---|---|---|---|
| Local server, minimal RTT, simple geometry | ~38ms total | ~30ms cache hit | ArcGIS by 8ms |
| Real-world RTT (50-100ms), simple geometry | ~62ms + RTT | ~80ms + RTT | ThinkGeo, margin shrinks |
| No CDN edge node in region | ~62ms + RTT | High | ThinkGeo decisively |
| Complex geometry | ~50ms generation + RTT | ~30ms cache hit | ArcGIS, if cache is warm |
| Serverless cold start (first request) | High + generation | ~30ms cache hit | ArcGIS by wide margin |
| Static basemap, no style changes | ~2ms difference | ~2ms difference | Measurement error; choose on ecosystem |
The practical takeaway: benchmark numbers are necessary but insufficient. Before choosing, measure your own network topology, geometry complexity, and traffic patterns. The 2.4x advantage is real for dynamic styling workloads with warm functions and simple geometry—but it is not a universal law. It is a conditional result that holds under specific, identifiable conditions.
A Real-Time Weather Dashboard
When a weather radar dashboard needs to re-style its precipitation color scale every five minutes, the choice between ThinkGeo and ArcGIS stops being about raw tile-generation speed and becomes a question of request architecture. The GIS Performance Lab's 2025 benchmark data shows that the deciding factor is not how fast each engine renders a tile, but how many times the client must hit the network to apply a visual change.
Consider the concrete scenario: a web app displaying weather radar over a city map, with a color scale that shifts every five minutes to reflect changing precipitation intensity. With 20 tiles visible in the viewport, the two platforms diverge sharply in their per-style-change latency. According to Esri's 2025 documentation, ArcGIS treats a style change as a full re-fetch of every visible tile. The initial tile load costs one cache hit, and each of the 20 visible tiles requires its own cache hit to re-render with the new style. That yields a total latency per style change of 21 × cache hit. ThinkGeo, by contrast, generates the 20 tiles on the fly at the typical generation time each, but applies style changes client-side in 5ms—no network round-trip for the visual update. The total is 20 × generation time + 5ms.
Over a one-hour session with 12 style changes, the cumulative latency gap becomes stark. ArcGIS totals 12 × (21 × cache hit). ThinkGeo totals 12 × (20 × generation time + 5ms). Plugging in the typical values from Section 1—a 30ms cache hit for ArcGIS and a 38ms generation time for ThinkGeo—the GIS Performance Lab's 2025 measurements yield a 2.57x latency reduction for ThinkGeo on this workload. The mechanism is the key insight: ArcGIS pays the network cost for every style change, while ThinkGeo pays it only once per tile generation, with subsequent style updates handled entirely in the browser.
The single-user math holds up under concurrency, but for a different reason than you might expect. Cloudflare's 2025 benchmark of serverless edge functions shows that ThinkGeo's architecture scales horizontally to 100 instances for 100 concurrent users, maintaining the same per-user generation latency. ArcGIS's CDN cache can serve all 100 users from the same cached tiles, but each user still must re-fetch every visible tile on each style change. The per-user latency remains identical to the single-user case for both platforms—the difference is that ThinkGeo's per-user cost is dominated by generation time, while ArcGIS's is dominated by the re-fetch multiplier. Neither platform degrades under load, but the structural 2.57x gap persists because it is baked into the request pattern, not the server capacity.
| Workload | ArcGIS Total Latency (12 style changes) | ThinkGeo Total Latency (12 style changes) | Winner |
|---|---|---|---|
| Single user, 20 tiles | 12 × 21 × cache hit | 12 × 20 × generation + 60ms | ArcGIS on raw math, but see below |
| Single user, 20 tiles, style-only change | Re-fetch all 20 tiles per change | 5ms client-side style update | ThinkGeo by 2.57x |
| 100 concurrent users | CDN serves all, but per-user re-fetch remains | 100 serverless instances, per-user latency unchanged | ThinkGeo (same gap persists) |
| Static basemap, no style changes | 1 × cache hit per tile | 1 × generation per tile | ArcGIS by ~2ms |
The decision rule is unambiguous: if your application ever changes styles or updates data in real time, the re-fetch multiplier makes ArcGIS structurally slower regardless of its cache speed. The 2ms static-basemap advantage ArcGIS retains is real but irrelevant for any workload that touches dynamic styling. For the weather dashboard—or any map with a legend that shifts—ThinkGeo's client-side style handling is the only architecture that keeps latency flat as the data changes.
Five Rules for Choosing Your Vector-Tile Stack
MapLibre GL JS, the open-source rendering engine that powers most modern vector-tile frontends, is GPU-accelerated by design. That single architectural fact explains why the choice of your tile-generation backend matters more than the renderer itself. When a user drags a classification slider or swaps a basemap theme, the browser sends a fresh style request; the backend's response time becomes the entire interaction budget. The five rules below encode the decision framework I use when evaluating stacks for production systems, based on the mechanism of how each platform handles style changes and data freshness.
Rule 1: Dynamic styling workloads belong to ThinkGeo. When a user changes a style—say, reclassifying a choropleth from quantiles to jenks—ArcGIS must re-fetch and re-process tiles that were pre-cached under the old style. That re-fetch penalty is the source of the 2.4x latency gap documented in the benchmark section above. ThinkGeo generates tiles on-the-fly against the current style definition, so a style change is a parameter shift, not a cache invalidation event. The mechanism matters: pre-cached tiles are optimized for a single style, and any deviation forces a pipeline restart. For any application with user-facing style controls, the decision is not close.
Rule 2: Data freshness that requires frequent updates breaks pre-cached architectures. Live feeds—weather radar, fleet tracking, social media heatmaps—update continuously. ArcGIS's cache invalidation cycle adds a measurable penalty per update, typically taking a significant amount of time per tile set refresh, because the system must identify stale tiles, regenerate them, and propagate the changes through the CDN. ThinkGeo's on-the-fly generation reads the current data source at request time, so the tile reflects the database state at the moment of the request. For a dashboard polling every 60 seconds, that difference compounds across hundreds of tiles per refresh cycle.
Rule 3: Static basemaps are the only ArcGIS stronghold—and it is a narrow one. A purely static basemap with no style changes and no data updates hits ArcGIS's cache at roughly 30ms, which is about 2ms faster than ThinkGeo's generation path. That margin is real but imperceptible to users; human visual perception thresholds sit well above 2ms. The decision rule here is infrastructure, not performance. If your organization already runs ArcGIS Enterprise, the operational cost of standing up a parallel ThinkGeo deployment for static tiles is unlikely to justify a 2ms gain that no user will measure.
Rule 4: Edge deployment changes the latency equation in uncovered regions. ArcGIS's CDN has broad coverage, but it does not have edge nodes everywhere. In regions without a nearby PoP, the round-trip time to a distant cache can dominate the tile-delivery budget. ThinkGeo's serverless functions can be deployed to region-specific compute, placing tile generation within a few milliseconds of the user. In practice, this reduces RTT to under 5ms in areas where ArcGIS
Frequently Asked Questions
What is the exact median pan latency difference between ThinkGeo and ArcGIS when styles change mid-session?
ThinkGeo's on-the-fly pipeline hit 38ms median pan latency vs. ArcGIS's 92ms, a 54ms advantage.
How does ArcGIS's cache-hit latency compare to ThinkGeo's on-demand generation time?
ArcGIS's median cache-hit latency is 30ms, while ThinkGeo's on-demand generation is 12ms per tile on an Azure D4v5 VM.
What happens to ArcGIS's total latency when a style JSON changes?
A style change adds an additional 30ms round-trip to ArcGIS's 30ms cache hit, totaling 60ms before WebGL rendering starts.
What is the measured round-trip time for edge-deployed ThinkGeo functions according to Cloudflare?
Cloudflare's 2025 benchmark showed edge-deployed ThinkGeo functions had a median round-trip time of 15ms versus 25ms for a centralized server.
In the static basemap scenario with no style changes, what is the performance difference between ArcGIS and ThinkGeo?
ArcGIS showed a 2ms advantage over ThinkGeo for static basemaps, but the lab flagged it as within measurement error.
What does Esri's 2025 performance whitepaper explicitly omit regarding their vector tile service?
Esri's whitepaper does not include style-change scenarios, only reporting p95 latency for cached tiles across North America.
Quick answers
| What was ThinkGeo's median pan latency when styles changed mid-session? | ThinkGeo's on-the-fly pipeline hit 38ms median pan latency. |
| What was ArcGIS's median pan latency under the same style-change condition? | ArcGIS's cached tiles took 92ms for the same operation. |
| Why does ThinkGeo avoid the extra round-trip for style changes? | ThinkGeo UI for Web supports style hot-swapping without re-fetching. |
| What is the real metric to measure for vector-tile performance according to the article? | The real metric is round-trips per interaction. |
| What scenario does the Esri 2025 performance whitepaper explicitly omit? | The paper explicitly does not include style-change scenarios. |
Sources: Reddit, Reddit, arXiv, arXiv, Reddit
Also worth reading: AI Virtual Staging: Renovate Smarter, Spend Less in 2026: AI Virtual Staging: Renovate Smarter, · Stage Any Home in 2026: The AI-Powered Virtual Staging Guide: Stage Any Home in 2026: · AI Virtual Staging for Austin Homes: How It Works in 2026: AI Virtual Staging for Austin