Best practices for improving tile loading performance ?

We at Webiks love CesiumJS. It is the 'weapon of choice' for most of our projects where we develop data analysis applications that have a geo-spatial aspect.

However, one issue that keeps coming up every time we integrate Cesium into one of our apps is raster tiles loading performance.
When we compare the performance to lighter mapping libraries, such as Leaflet and Open Layers, Cesium's numbers and derived user experience is dramatically inferior. Yes, we are comparing 3D oranges to 2D apples, however this is still an issue for us and our customers.

We wonder - is there anywhere a written best practice for improving the tile loading performance?
If not - can you share your thoughts and findings regarding this issue? We'll be glad to collect those pieces of information into a coherent blog post recipe.

So far we have tried reducing the total number of imagery layers, switching from 3d to 2d, switching from wms to wmts, png/jpeg formats. Some changes had influence, but we wonder is there a recipe for what we are trying to achieve...

Found this (not so new) related thread. Most of the ideas there are aiming to changes inside Cesium (culling, skipping levels, etc.), while we currently are only looking for usage best practices.

Any help appreciated.


Hi Omer,

You can limit the tiles that Cesium requests by using the rectangle property when constructing an imagery layer.

var layer = new ImageryLayer(wmsImageryProvider, {

   rectangle : Cesium.Rectangle.fromDegrees(45, -75, 50, -70)




Additionally, as you pointed out, one solution would be to skip levels of detail, and we’re tracking that in this GitHub issue. Contributions are greatly appreciated if you have the bandwidth!



Thanks Gabby,
We will look deeper into the LOD skipping issue, if the implementation lies within our area of knowledge we will definitely try to contribute.