Skip to content
← Back to Snippets
Code

Critical Asset Decision Map

Classifies page assets as preload, defer, lazy, or normal based on render role and route importance.

Purpose

Classifies page assets as preload, defer, lazy, or normal based on render role and route importance.

Snippet details

ContextPerformanceLevelAdvancedCopy-and-paste statusMarked safe after review.

Categories

  • Security

Code

<?php

/*
 * Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
 * Free for personal and internal use. Paid project use requires visible credit
 * to Jeffery L. Paris. Corporate use requires a paid license fee unless a
 * separate written license states otherwise.
 */

/**
 * Critical Asset Decision Map.
 *
 * Purpose:
 * Classifies page assets as preload, defer, lazy, or normal based on render role and route importance.
 *
 * @param array $assets Asset rows with type, render_role, and route_scope.
 * @return array Asset loading decisions.
 */
function ogSnippetCriticalAssetDecisionMap(array $assets): array {
	$decisions = array();
	foreach ($assets as $asset) {
		$action = 'normal';
		$role = '';
		if (isset($asset['render_role'])) {
			$role = (string) $asset['render_role'];
		}

		$type = '';
		if (isset($asset['type'])) {
			$type = (string) $asset['type'];
		}
		if ($role === 'lcp-image' || $role === 'critical-font') {
			$action = 'preload';
		}
		if ($type === 'script' && $role !== 'critical') {
			$action = 'defer';
		}
		if ($type === 'image' && $role === 'below-fold') {
			$action = 'lazy';
		}
		$decisions[] = array('asset' => (string) $asset['path'], 'action' => $action);
	}
	return $decisions;
}

$asset_decisions = ogSnippetCriticalAssetDecisionMap(array(array('path' => '/img/x-wing.webp', 'type' => 'image', 'render_role' => 'lcp-image')));
echo $asset_decisions[0]['action'];