resource-loading-strategy

A set of web resource-loading rules based on a three-phase approach: load critical content first, enhancements later, and third-party code last. AEM is Adobe Experience Manager, a platform for managing website content.

In plain words
What is it for?
It is for deciding when scripts, styles, images, page sections, and third-party services should load on AEM-based websites.
Why use it?
It helps keep essential page resources small and prevents nonessential scripts or content from delaying the first visible result.

Cursor rule for Cursor

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add rules/adobecom/express-milo/resource-loading-strategy
Clone the repo
git clone --depth 1 https://github.com/adobecom/express-milo

Made for: Cursor.

Per session 2,619 This file is loaded in full into every session.
When invoked 2,619 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin 100% copy Near-identical to another mod in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.02619 $0.02619
Opus 5 $0.01309 $0.01309
Sonnet 5 $0.00524 $0.00524
Haiku 4.5 $0.00262 $0.00262

Measured 2d ago against content hash 766307f580c1, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

resource-loading-strategy scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

This is a copy

100% identical to resource-loading-strategy — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.

.cursor/rules/resource-loading-strategy.mdc · 358 lines

How it starts

The opening of the file, as written. The whole thing — 358 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Resource Loading Performance Rules - Three-Phase Strategy

APPLY: EVERY QUERY - CRITICAL PERFORMANCE RULE

AEM Three-Phase Loading (E-L-D) - REQUIRED

Based on AEM's performance guidelines:

Phase E (Eager) - Critical Path to LCP

100KB BANDWIDTH BUDGET - STRICTLY ENFORCED

<!-- ✅ REQUIRED - Critical path optimization in head.html -->
<style>body { display: none; }</style>

<!-- ✅ REQUIRED - Single origin, under 100kb total -->
<script src="/express/code/scripts/scripts.js" type="module"></script>
<script src="/express/code/scripts/fallback.js" nomodule></script>

<!-- ✅ REQUIRED - Viewport meta for responsive design -->
<meta name="viewport" content="width=device-width, initial-scale=1"/>

<!-- ❌ FORBIDDEN - Before LCP (consumes bandwidth budget) -->
<!-- NO early hints, h2-push, preconnect, or font loading -->

Phase L (Lazy) - Same-Origin Enhancement

Project-controlled content that doesn't affect TBT/FID

// ✅ REQUIRED - Lazy loading for Phase L content
const loadPhaseL = () => {
  // Load next sections and their blocks
  loadBelowFoldSections();
  
  // Load remaining images with lazy loading
  const lazyImages = document.querySelectorAll('img[loading="lazy"]');
  lazyImages.forEach(img => observeImage(img));
  
  // Load non-blocking JavaScript libraries
  loadNonCriticalModules();
};

// Start Phase L after LCP is achieved
document.addEventListener('lcp-ready', loadPhaseL);

Phase D (Delayed) - Third-Party Deferred

MANDATORY 3+ second delay after LCP

// ✅ REQUIRED - Phase D delayed loading (3+ seconds)
const loadPhaseD = (DELAY = 3000) => new Promise(resolve => {
  setTimeout(() => {
    // Marketing and analytics (not critical for CWV)
    loadAnalytics();
    loadTagManager();
    loadConsentManagement();
    
    // Interactive features
    loadChatSupport();
    loadSocialMediaEmbeds();
    loadA11yTools();
    
    // Heavy third-party integrations
    loadCommentSystems();
    loadVideoEmbeds();
    
    resolve();
  }, DELAY);
});

Read the full file on GitHub · 358 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 358 lines · 2,619 tokens per session scan A 766307f580c1

Subscribe to this mod's changes

resource-loading-strategy is a cursor rule published in the GitHub repository adobecom/express-milo (6 stars, last pushed 1mo ago), licensed Apache-2.0. It adds 2,619 tokens to every session, about $0.0131 per session on Opus 5. A static security scan graded it A with 0 findings. It is 100% identical to resource-loading-strategy, differing in 0 lines, and is treated as a copy.