(closest thing to native video lazy).
* - Auto-fills missing width / height attributes (best CLS win).
* - Excludes by substring patterns (src or class match) — useful for
* hero banner classes, logo files, etc.
*
* Tier: Free per FEATURES.md "Images" §1-6 (LiteSpeed parity — all
* Free in LS Cache).
*
* @package XSpeed
*/
declare(strict_types=1);
namespace XSpeed\Modules\Lazy;
use XSpeed\Lazy_Loader;
use XSpeed\Module;
final class LazyModule extends Module {
public const SLUG = 'lazy';
public const TIER = self::TIER_FREE;
public const VERSION = '1.0.0';
public function ui_metadata(): array {
return array(
'label' => 'Lazy Load',
'icon' => 'Image',
'description' => 'Defer images / iframes / videos until they scroll into view, and auto-add missing dimensions to prevent CLS.',
);
}
public function settings_schema(): array {
return array(
'lazy_images' => array(
'type' => 'bool',
'default' => true,
'label' => 'Lazy-load Images',
'description' => 'Add loading="lazy" + decoding="async" to
tags in post content. The first images on the page get loading="eager" so the LCP image is not deferred.',
),
'lazy_iframes' => array(
'type' => 'bool',
'default' => true,
'label' => 'Lazy-load Iframes',
'description' => 'Add loading="lazy" to