Skip to main content

CDN: Chunk Loading & Troubleshooting

When using the Myop SDK via CDN (<script src="https://cdn.myop.dev/sdk/next/myop_sdk.min.js">), the SDK uses a modular chunk-loading system internally called __federation__. This page explains how it works and how to troubleshoot issues when chunks fail to load.

How CDN Chunk Loading Works​

The CDN SDK is split into multiple chunks for performance — only the modules your page actually uses are loaded:

ChunkDescription
myop_sdk.min.jsRoot entry — lightweight bootstrap
_HostSDK.*.min.jsHost SDK module (component loading, messaging)
_IframeSDK.*.min.jsIframe SDK module (runs inside component iframes)
_helpers.*.min.jsHelpers (CloudRepository, config builders)

When a module is needed (e.g. getHostModule()), the root SDK dynamically creates a <script> tag to load the corresponding chunk.

Base Path Resolution​

The SDK determines where to load chunks from using document.currentScript.src — the URL of the root myop_sdk.min.js script. For example:

Script src: https://cdn.myop.dev/sdk/next/myop_sdk.min.js
Resolved base: https://cdn.myop.dev/sdk/next/
Chunk URL: https://cdn.myop.dev/sdk/next/_HostSDK.a1b2c3d4.min.js

This works automatically in most setups. However, caching proxies can break this mechanism.

The Caching Proxy Problem​

Some hosting platforms optimize JavaScript by combining, relocating, or proxying scripts through their own URLs:

  • LiteSpeed Cache (WordPress) — combines scripts into /wp-content/litespeed/js/...
  • Cloudflare Rocket Loader — rewrites script tags
  • WP Rocket, Autoptimize — similar JS optimization plugins

When a proxy relocates myop_sdk.min.js, document.currentScript.src returns the proxy URL instead of the CDN URL. The SDK then tries to load chunks from the proxy path — where they don't exist:

Script src (rewritten): https://example.com/wp-content/litespeed/js/c9d89370.js
Resolved base: https://example.com/wp-content/litespeed/js/
Chunk URL (404!): https://example.com/wp-content/litespeed/js/_IframeSDK.fe8716bb.min.js

Result: Chunks return 404, components fail to initialize (timeout errors).

Fix: Override the Base Path​

Add this before the SDK script tag (or the optimized/combined script that includes the SDK):

<script>
window.__federation__ = {
__public_path__: 'https://cdn.myop.dev/sdk/next'
};
</script>

This tells the SDK to always load chunks from the specified URL, ignoring the auto-detected path.

Full Example​

<!-- Override chunk base path (required when using caching proxies) -->
<script>
window.__federation__ = {
__public_path__: 'https://cdn.myop.dev/sdk/next'
};
</script>

<!-- SDK script (may be optimized/combined by LiteSpeed, Cloudflare, etc.) -->
<script src="https://cdn.myop.dev/sdk/next/myop_sdk.min.js"></script>

WordPress / LiteSpeed Example​

If LiteSpeed has already combined your scripts, add the override snippet in your theme's <head> before the combined script:

<script>
window.__federation__ = {
__public_path__: 'https://cdn.myop.dev/sdk/next'
};
</script>
<!-- LiteSpeed combined script (includes myop_sdk.min.js) -->
<script data-optimized="1" src="/wp-content/litespeed/js/c9d89370.js"></script>

Automatic CDN Fallback​

Starting from SDK version 0.3.25, the SDK automatically retries chunk loading from the CDN when a chunk fails to load from the detected path. This handles most caching proxy scenarios without requiring the __public_path__ override.

However, setting __public_path__ is still recommended when you know a proxy is in use — it avoids the initial failed request and the retry delay.

Diagnosing Chunk Loading Issues​

Symptoms​

  • Components don't render (blank container)
  • Console shows timeout_5000 errors
  • Network tab shows 404 responses for _HostSDK.*.min.js or _IframeSDK.*.min.js

Steps to Diagnose​

  1. Open DevTools → Network tab and filter by _HostSDK or _IframeSDK
  2. Check the URL of the failed request — if it points to your domain instead of cdn.myop.dev, a caching proxy has rewritten the script source
  3. Open DevTools → Console and run:
    console.log(window.__federation__.__public_auto_path__);
    If this shows your domain instead of cdn.myop.dev, the base path was mis-detected

Quick Console Fix (for testing)​

To verify the fix before making code changes, run this in the console before navigating to the page, or use it as a browser override:

window.__federation__ = {
__public_path__: 'https://cdn.myop.dev/sdk/next'
};

Then reload the page. If components load correctly, add the __public_path__ snippet to your HTML.

__federation__ Reference​

PropertyTypeDescription
__public_path__stringExplicit base URL for chunk loading. Takes priority over auto-detection.
__public_auto_path__string(Read-only) Auto-detected base path from document.currentScript.src
__use_public_auto_path__boolean(Internal) Whether auto-detection is active
__loading_timeout__numberChunk loading timeout in ms (default: 5000)