Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To avoid an unnecessary GraphQL waterfall in the Next.js App Router, start independent requests before awaiting their results, then use Suspense boundaries to stream the parts of the page that depend on pending data. Suspense controls what renders while work is pending; it does not make a later request start sooner if that request waits for an earlier one.

What causes a GraphQL waterfall?

A waterfall occurs when a page starts one request, waits for it to finish, and only then starts another request that could have run independently. In a Server Component, this pattern serializes otherwise independent work:

const profile = await getProfile();
const recommendations = await getRecommendations();

If recommendations do not depend on the profile result, the second call need not wait. The key is to map the page’s data dependencies: identify which operation needs an ID or value returned by another, and which operations can begin on their own.

Sequential fetching is appropriate when there is a real dependency. For example, if the second GraphQL operation requires an ID returned by the first, that sequence cannot be removed without changing the data flow. Next.js describes parallel data fetching as eagerly initiating independent requests so they can start together: Next.js data fetching documentation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

Start independent GraphQL requests before awaiting them

Create promises for independent operations first. Use Promise.all when the component needs every result before it can render:

const profilePromise = getProfile();
const recommendationsPromise = getRecommendations();

const [profile, recommendations] = await Promise.all([
  profilePromise,
  recommendationsPromise,
]);

Both requests can begin before the code waits for either result. This avoids the serialization caused by sequential await statements. The pattern applies whether the GraphQL calls use a client library or another request function; what matters is when each promise is created.

Do not combine requests merely to use Promise.all if their results are not needed together. If separate page regions can render as their own data arrives, keep them independently renderable so one slow request does not hold up the others.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Use Suspense to stream the UI that depends on pending data

Suspense lets React show a fallback while a child component waits for data, so page content outside the boundary can be sent without waiting for that child. Put the boundary around the smallest useful portion of the interface and give it a meaningful fallback:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
import { Suspense } from 'react';

export default function Page() {
  return (
    <main>
      <h1>Account overview</h1>
      <Suspense fallback={<p>Loading profile…</p>}>
        <ProfilePanel />
      </Suspense>
      <Suspense fallback={<p>Loading recommendations…</p>}>
        <RecommendationsPanel />
      </Suspense>
    </main>
  );
}

These boundaries allow the profile and recommendations regions to reveal independently if their components start their respective requests without waiting on one another. If a component starts request B only after request A resolves, wrapping it in Suspense does not change that order. Suspense is a rendering and streaming mechanism, not a concurrency switch. See the Next.js loading UI and streaming guide.

Choose the right loading boundary

A route-segment loading.js supplies loading UI for navigation and streaming at that segment. It does not guarantee that the loading UI appears before runtime or uncached work in a layout of the same segment: that work can block navigation first. When appropriate, isolate the operation in a nearer Suspense boundary or move it into the page so the loading interface can appear around the pending work.

Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.

Use a route-level loading file when the whole segment needs a navigation fallback; use a local boundary when only a specific region is pending and the rest of the page can render. These solve different placement problems.

Choose a pattern based on dependencies and what should render first

Situation Request strategy Rendering strategy
Independent results are both required for one component Start both promises, then await them together with Promise.all. Render the component when both results are available; put its surrounding region under Suspense if the rest of the page should stream earlier.
Independent regions can appear separately Start each region’s request as early as possible without making it wait on the other. Use separate components and Suspense boundaries so each region can render as its own data resolves.
A later operation requires an earlier result Await the prerequisite, then start the dependent operation. Place a boundary around the pending dependent region if other page content can render meanwhile.

This distinction helps diagnose whether the delay comes from request scheduling or from the page’s actual data dependencies. Streaming can improve when content becomes visible, but it cannot remove a dependency in the request graph.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use Apollo’s App Router integration deliberately

Apollo’s official Next.js App Router integration covers React Server Components and Client Components. Follow its current package setup and cache-boundary guidance rather than assuming a generic Apollo configuration applies unchanged.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

Request-scoped client setup

Apollo documents sharing a client instance for a single server request to avoid duplicate requests within that request. Keep that scope in mind when configuring the client; sharing a server client across unrelated requests can mix data or cache state.

Preload or suspend where the data belongs

The integration documents PreloadQuery for starting a query in a Server Component before a Client Component consumes it, as well as suspense-enabled hooks such as useSuspenseQuery. Choose based on which component owns the data and where it needs to be consumed. Apollo advises treating preloaded data as client data. Avoid overlapping Server Component and SSR queries unless there is a deliberate reason for both; duplicate work at that boundary is different from resolver-level N+1 behavior.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Distinguish page-level waterfalls from backend N+1 queries

Starting page-level GraphQL operations in parallel does not guarantee that the GraphQL server makes efficient database or service calls. A resolver can still issue repeated data-source loads—for example, one lookup for each item in a list. That is a backend N+1 problem, not a React scheduling problem.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

Apollo recommends DataLoader for batching, deduplication, and caching at the data-source layer. Its memoization is scoped to a GraphQL request. DataLoader can reduce repeated backend loads; it does not make one route-level request begin before another.

Verify where the delay occurs

Use request traces and production-like rendering to check both the request timeline and the streamed UI. No universal speedup is established for this specific stack; the result depends on dependencies, caching, errors, and deployment runtime.

  • Check when each GraphQL operation begins. If an independent request starts only after another completes, inspect the order of promise creation and awaits.
  • Check whether requests truly are independent. If one needs a value returned by another, preserve that dependency rather than forcing parallelism.
  • Observe when page regions and fallbacks appear. A responsive fallback does not prove that the underlying requests began concurrently.
  • Inspect resolver and data-source activity separately. Repeated backend loads point toward batching or deduplication work, not necessarily a page-level waterfall.
  • Review caching and error behavior in the deployment environment you actually use; behavior can differ across runtimes and cache configurations.

Next.js and Apollo APIs, integration packages, and caching behavior can change. Check their current documentation when implementing or upgrading the integration.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.