Quan Mai
Optimizely
Jan 20, 2015
visibility 3121
star star star star star
(0 votes)

Don’t let CatalogEntryFull slows you down.

Just like any EPiServer products, one of main concern of us when developing Commerce is performance. Why many parts of Commerce can be described as “Good enough”, some parts are just acceptable, and I must admit that there’s area where performance need to be improved to meet customer’s expectation.

We are under an intensive performance improvement process which we try to optimize our code to cut out any slow code we can found. And one thing come to my mind when I investigate the impact of CatalogEntryResponseGroup. Let’s see the dotTrace profile for CatalogEntryFull value:  CatalogEntryFull

You can see how insane CatalogEntryFull can do. It’s more than 4000 call to LoadEntryWorker just to load 9 Entry.

The terrible secret behind CatalogEntryFull is when you use it, Catalog system will try to load everything of the CatalogEntryDto, along with associations and children, recursively. The more complex and related your catalog entry is, the slow CatalogEntryFull becomes.

While we recommend to use new content API:s whenever possible, there are still place where Entry/Entries being used, such as when you call CartHelper.AddToCart method. Be sure to use the minimal ResponseGroup which works for you, instead of throw the full-fledge, big and slow CatalogEntryFull.

 

TL, DR; you should avoid CatalogEntryFull if you don’t have too. Use it only you absolutely need it. Use most lightweight CatalogEntryResponseGroup enum that do the work for you. You might need to use several enum combined, such as Assets | Inventory, instead of just going for the bad, ugly and slow CatalogEntryFull.

Jan 20, 2015

Comments

Arve Systad
Arve Systad Jan 20, 2015 11:36 PM

I like what I read!

Every millisecond counts, and especially in solutions with thousands of products, all performance gains are extremely welcome.

Are there plans to get rid of the CatalogEntryDto-style APIs at some point, and let the "de facto product management" go through IContentLoader and other more modern interfaces?

Quan Mai
Quan Mai Jan 21, 2015 03:40 AM

I believe that it's our vision, but it won't happen anytime soon. We would support two API:s at the same time for smoother transition.



By the way, this blog post applies for EPiServer Commerce all version, from 1 R1 to latest nuget package.

error Please login to comment.
Latest blogs
EPiServer.ImageLibrary.ImageSharp 2.0.7 delisted from NuGet feed

We have delisted version 2.0.7 of the EPiServer.ImageLibrary.ImageSharp package from the NuGet feed due to a packaging issue. This version was...

Phu Nguyen | Oct 19, 2026

Surviving a Dirty Feed. Part 3: Error Handling and Event Batching

Committing a 250,000-row Optimizely catalog import row by row, returning a per-row failure report, and coalescing catalog events into one per batch.

Stanisław Szołkowski | Oct 16, 2026 |

Building UI Extensions for Optimizely SaaS CMS

Introduction Developers have been extending the functionality of Optimizely PaaS CMS for years using addons built in C# and deployed as NuGet...

Mark Stott | Oct 15, 2026

Cheapskate AI Translator: Because Translation Should Not Require a Second Mortgage

There is a particular kind of software project that begins with a detailed architecture document, a product roadmap, and a carefully assembled...

Linh Doan Cuu | Oct 15, 2026

Computed Fields in CMS 13 Content Contracts with Optimizely Graph

Content Contracts in Optimizely CMS 13 allow different content types to share a common structure when querying Optimizely Graph. But what if the...

Mardy | Oct 14, 2026

Opal Workflow Agents And The Graph Webhook Trap

What we did? We built a compliance review workflow agent in Opal. The job was simple: when an editor submits a page for review in Optimizely CMS 13...

Ritu Madan | Oct 14, 2026