Storefront GraphQL API noticeably slower than productUrl.json (AJAX API) for single-product fetches

We’re observing a consistent performance difference between Shopify’s Storefront GraphQL API and the legacy AJAX API (/products/{handle}.json) when fetching a single product.

Observed behavior (Dev environment):

  • AJAX API (productUrl.json)
    ~300–500 ms consistently

  • Storefront GraphQL API (/graphql.json)
    ~500–600 ms on average, with occasional spikes up to ~900 ms

This is for one product only, batching/multi-product queries are not involved here, so batching benefits of GraphQL are irrelevant in this scenario.

Questions:

  • Is this expected behavior due to GraphQL execution, authorization, or resolver overhead?

  • Are there known optimizations or best practices to reduce Storefront API latency for single-entity fetches?

  • Do Shopify themes internally prefer AJAX product endpoints for performance-critical paths?

  • Any benchmarks or guidance from Shopify on when Storefront GraphQL is recommended vs AJAX APIs?

Would love insights from others who’ve measured this in production or have architectural context from Shopify’s side.