A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

Jonas Bergqvist
Feb 28, 2025
  1390
(6 votes)

Optimizely Graph Cache: The Power of "Item"

In the world of content delivery, speed is king. A high cache hit ratio is the secret weapon for delivering snappy performance and happy users. But how do you achieve that? One powerful trick lies in understanding the difference between "items" and "item" in your GraphQL queries.

The Cache Challenge: Lists vs. Specifics

GraphQL's flexibility often leads to queries fetching lists ("items"). While necessary for many scenarios, this can hinder caching. Why? Because even a list with one item requires the cache to consider potential changes to any content, leading to frequent cache invalidations.

The "Item" Advantage: Precision Caching

Enter the "item" query. When you request a single item by its unique identifier, you unlock granular, efficient caching.

How to Leverage "Item" for Optimal Caching:

  • Improve Cache Hit Ratio: Swap "items" for "item" when fetching a single entity. It's a small change with big results.
  • Unique Identifier-Driven Queries: Only use "item" when targeting a specific item via its unique identifier (relative paths, URLs, codes, etc.).

Cache hit example for query with "item"

Cache hit example for query with "items"

Practical Example

Instead of

query GetItem($relativePath: String) {
  Content(limit:1 where: { RelativePath: { eq: $relativePath } }) {
    items { Name }
  }
}

Use

query GetItem($relativePath: String) {
  Content(where: { RelativePath: { eq: $relativePath } }) {
    item { Name }
  }
}

Conclusion

Using "item" for single entity retrieval based on unique identifiers dramatically improves cache hit ratios, enhancing performance and user experience. It's a simple, powerful technique to unlock the full potential of your GraphQL cache.

Feb 28, 2025

Comments

Surjit Bharath
Surjit Bharath Mar 17, 2025 02:19 PM

5 star tip. Thanks Jonas

Please login to comment.
Latest blogs
A day in the life of an Optimizely OMVP - OptiGraphExtensions v2.0: Enhanced Search Control with Language Support, Synonym Slots, and Stop Words

Supercharge your Optimizely Graph search experience with powerful new features for multilingual sites and fine-grained search tuning. As search...

Graham Carr | Dec 16, 2025

A day in the life of an Optimizely OMVP - Optimizely Opal: Specialized Agents, Workflows, and Tools Explained

The AI landscape in digital experience platforms has shifted dramatically. At Opticon 2025, Optimizely unveiled the next evolution of Optimizely Op...

Graham Carr | Dec 16, 2025

Optimizely CMS - Learning by Doing: EP09 - Create Hero, Breadcrumb's and Integrate SEO : Demo

  Episode 9  is Live!! The latest installment of my  Learning by Doing: Build Series  on  Optimizely Episode 9 CMS 12  is now available on YouTube!...

Ratish | Dec 15, 2025 |

Building simple Opal tools for product search and content creation

Optimizely Opal tools make it easy for AI agents to call your APIs – in this post we’ll build a small ASP.NET host that exposes two of them: one fo...

Pär Wissmark | Dec 13, 2025 |