Skip to content

Sponsor

Sponsor

DOMHelpers Global Object — Best Practices and Patterns

When to Use DOMHelpers vs Direct Globals

The library exposes two ways to access everything — direct globals and the DOMHelpers object. Here's the practical guide to choosing:

Use Direct Globals for DOM Work

javascript
// ✅ Day-to-day element access — clean and short
Elements.header.update({ textContent: 'Welcome' });
Collections.ClassName.btn.update({ disabled: false });
Selector.query('#nav').update({ style: { display: 'flex' } });

Use DOMHelpers for Library Management

javascript
// ✅ Startup, configuration, monitoring, cleanup
DOMHelpers.isReady();
DOMHelpers.configure({ enableLogging: true });
DOMHelpers.getStats();
DOMHelpers.clearAll();

Key Insight: If you're touching DOM elements, use the direct globals. If you're managing the library itself, use DOMHelpers.


Here's a pattern that covers the full lifecycle — from startup to shutdown:

javascript
// ─── 1. STARTUP ───
function initApp() {
  // Check readiness
  if (!DOMHelpers.isReady()) {
    console.error('DOM Helpers failed to load');
    return;
  }

  // Configure for current environment
  const isDev = location.hostname === 'localhost';
  DOMHelpers.configure({
    enableLogging: isDev
  });

  console.log(`DOM Helpers v${DOMHelpers.version} ready`);

  // Start using helpers
  Elements.header.update({ textContent: 'App Loaded!' });
}

// ─── 2. DURING RUNTIME ───
function onContentReload() {
  // After AJAX content replacement, clear stale caches
  DOMHelpers.clearAll();
}

function debugPerformance() {
  // Check how the cache is performing
  const stats = DOMHelpers.getStats();
  console.table({
    Elements:    stats.elements,
    Collections: stats.collections,
    Selector:    stats.selector
  });
}

// ─── 3. SHUTDOWN ───
// Automatic — the library handles this on page unload
// Manual — only if you need to tear down mid-session:
function teardown() {
  DOMHelpers.destroyAll();
}

Configuration Patterns by Environment

Development

javascript
if (location.hostname === 'localhost') {
  DOMHelpers.configure({
    enableLogging: true,
    cleanupInterval: 10000
  });
}

Production

javascript
DOMHelpers.configure({
  enableLogging: false,
  autoCleanup: true,
  cleanupInterval: 60000,
  maxCacheSize: 2000
});

Quick Reference: All DOMHelpers Members

DOMHelpers

├── Properties
│   ├── .Elements              Access the Elements helper
│   ├── .Collections           Access the Collections helper
│   ├── .Selector              Access the Selector helper
│   ├── .createElement         Access enhanced createElement
│   └── .version               Library version string

├── Status
│   ├── .isReady()             Are all helpers available?
│   └── .getStats()            Combined cache statistics

├── Cache Management
│   ├── .clearAll()            Empty all caches (helpers keep running)
│   └── .destroyAll()         Full shutdown (helpers stop)

├── Configuration
│   └── .configure(options)    Configure all helpers

└── createElement Control
    ├── .enableCreateElementEnhancement()   Turn on enhanced createElement
    └── .disableCreateElementEnhancement()  Restore original createElement

Method Quick Reference

MethodDoesReturnsUse When
isReady()Checks all helpers existtrue / falseApp startup
getStats()Gets cache performance data{ elements, collections, selector }Debugging, monitoring
clearAll()Empties all cachesundefinedAfter major DOM changes
destroyAll()Full shutdownundefinedApp teardown
configure(options)Updates settingsDOMHelpersApp startup, env switching
enableCreateElementEnhancement()Enhances document.createElementDOMHelpersWhen you want .update() on created elements
disableCreateElementEnhancement()Restores original createElementDOMHelpersThird-party library compatibility

Common Mistakes to Avoid

Mistake 1: Using Helpers After destroyAll()

javascript
// ❌ Helpers stop working after destroyAll()
DOMHelpers.destroyAll();
Elements.header;  // Caching and observers are shut down

// ✅ Use clearAll() if you still need the helpers
DOMHelpers.clearAll();
Elements.header;  // Works — cache is just empty, helpers rebuild it

Mistake 2: Forgetting That Properties Are References

javascript
// These are the SAME object — not copies
DOMHelpers.Elements === Elements;  // true

// Changing one changes the other
DOMHelpers.Elements.header.update({ textContent: 'Changed' });
// Elements.header.textContent is now 'Changed' too — same element

Mistake 3: Over-Configuring

javascript
// ❌ No need to configure defaults — they're already set
DOMHelpers.configure({
  enableLogging: false,   // Already false by default
  autoCleanup: true,      // Already true by default
  maxCacheSize: 1000      // Already 1000 by default
});

// ✅ Only configure what you're changing
DOMHelpers.configure({ enableLogging: true });

Summary

PrincipleGuideline
DOM workUse direct globals (Elements, Collections, Selector)
Library managementUse DOMHelpers object
StartupCheck isReady(), configure(), log version
RuntimeclearAll() after major DOM changes, getStats() for monitoring
ShutdownAutomatic on page unload — manual destroyAll() only if needed
ConfigurationOnly set what you're changing from defaults