BACKGROUND WEB OPTIMIZER (Ultra Performance) - v10.0 Optimized

Extreme performance optimization using a unified blocker, MutationObserver for SPAs, idle tasks, and more efficient caching.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         BACKGROUND WEB OPTIMIZER (Ultra Performance) - v10.0 Optimized
// @namespace    http://gemini/
// @version      10.0
// @description  Extreme performance optimization using a unified blocker, MutationObserver for SPAs, idle tasks, and more efficient caching.
// @author       Gugu8
// @match        *://*/*
// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// @run-at       document-start
// ==/UserScript==

(function () {
  'use strict';

  // Basic safety guard: only top window
  try { if (window.top !== window.self) return; } catch (e) {}

  // --- Core identifiers ---
  const CONFIG_KEY = 'gemini_optimizer_config_v10';
  const CONFIG_VERSION = 10;
  const CACHE_NAME = 'gemini-ultra-cache-v10';
  const CACHE_META_KEY = 'gemini_ultra_cache_meta_v10';

  // --- 1) Granular Network Blocking: Fast host checks ---
  const BLOCKED_PATTERNS = [
    'google-analytics.com', 'googletagmanager.com', 'facebook.net', 'doubleclick.net',
    'hotjar.com', 'sentry.io', 'addthis.com', 'sharethis.com', 'segment.com',
    'optimizely.com', 'mixpanel.com', 'amplitude.com', 'newrelic.com',
    'amazon-adsystem.com', 'googlesyndication.com', 'scorecardresearch.com',
    'quantserve.com', 'outbrain.com', 'taboola.com'
  ];
  const BLOCKED_HOSTS_SET = new Set(BLOCKED_PATTERNS);

  // Simple host-based matcher (fast path, scalable)
  function matchesBlocked(url) {
    if (!url) return false;
    try {
      const host = (new URL(url, location.origin)).hostname;
      if (BLOCKED_HOSTS_SET.has(host)) return true;
      // Suffix matching (subdomains)
      for (const pat of BLOCKED_PATTERNS) {
        if (host === pat || host.endsWith(`.${pat}`)) return true;
      }
    } catch {
      // ignore
    }
    return false;
  }

  // --- 3) Advanced Memory Leak Prevention helpers (with Debounced Save) ---
  class TTLCacheStore {
    constructor(storageKey = CACHE_META_KEY) {
      this.storageKey = storageKey;
      this.saveTimeout = null;
      this._load();
    }
    _load() {
      try {
        const raw = localStorage.getItem(this.storageKey);
        this.map = raw ? JSON.parse(raw) : {};
      } catch { this.map = {}; }
    }
    _save() {
      clearTimeout(this.saveTimeout);
      this.saveTimeout = setTimeout(() => {
        try { localStorage.setItem(this.storageKey, JSON.stringify(this.map)); } catch {}
      }, 500);
    }
    get(url) {
      const rec = this.map[url];
      if (!rec) return null;
      if (Date.now() > rec.expiry) {
        delete this.map[url];
        this._save();
        return null;
      }
      return rec;
    }
    set(url, ttl) {
      this.map[url] = { expiry: Date.now() + (ttl || 600000) };
      this._save();
    }
    delete(url) {
      delete this.map[url];
      this._save();
    }
    clear() {
      this.map = {};
      this._save();
    }
  }

  // --- 4) Selector Cache (Selective DOM optimization) ---
  class SelectorCache {
    constructor() { this.cache = new Map(); this.ttlMs = 30000; }
    queryAll(sel) {
      const t = Date.now();
      if (this.cache.has(sel)) {
        const { value, time } = this.cache.get(sel);
        if (t - time < this.ttlMs) return value;
      }
      const value = Array.from(document.querySelectorAll(sel));
      this.cache.set(sel, { value, time: t });
      return value;
    }
    clear() { this.cache.clear(); }
  }

  // --- 6) Dynamic Font Loading (Font Loading API) ---
  class DynamicFontLoader {
    constructor() { this.loaded = false; }
    loadFromCSS() {
      if (this.loaded) return;
      try {
        for (const sheet of document.styleSheets) {
          let rules;
          try { rules = sheet.cssRules; } catch { continue; }
          if (!rules) continue;
          for (const r of rules) {
            if (r.type === CSSRule.FONT_FACE_RULE) {
              const family = r.style.getPropertyValue('font-family');
              const src = r.style.getPropertyValue('src');
              if (family && src) {
                try {
                  const f = new FontFace(family.replace(/['"]/g, ''), src);
                  f.load().then(loaded => { document.fonts.add(loaded); }).catch(() => {});
                } catch {}
              }
            }
          }
        }
      } catch { /* ignore cross-origin */ }
      this.loaded = true;
    }
  }

  // --- 7) Web Worker for Heavy Tasks (parse large HTML-ish data in a worker) ---
  class WorkerManager {
    constructor() {
      this.worker = null;
      this.nextId = 1;
      this.callbacks = new Map();
      this._initWorker();
    }
    _initWorker() {
      if (typeof Worker === 'undefined') return;
      const code = `
        self.onmessage = function(e) {
          const { id, type, payload } = e.data || {};
          if (type === 'parseHTML') {
            const html = payload || '';
            // Naive extraction of hrefs
            const urls = (html.match(/href\\s*=\\s*["']([^"']+)["']/gi) || [])
              .map(s => s.match(/["']([^""]+)["']/)[1] || s.replace(/href\\s*=\\s*["']/, ''))
              .filter(u => !!u);
            const uniq = Array.from(new Set(urls)).slice(0, 150);
            self.postMessage({ id, urls: uniq });
          } else {
            self.postMessage({ id, result: null });
          }
        };
      `;
      try {
        const blob = new Blob([code], { type: 'application/javascript' });
        const blobURL = URL.createObjectURL(blob);
        this.worker = new Worker(blobURL);
        this.worker.onmessage = (evt) => {
          const { id, urls } = evt.data;
          const cb = this.callbacks.get(id);
          if (cb) cb(urls);
          this.callbacks.delete(id);
        };
      } catch (e) {
        console.error('[Gemini Ultra] Web Worker init failed:', e);
        this.worker = null;
      }
    }
    parseHTML(html) {
      return new Promise((resolve) => {
        if (!this.worker) {
          try {
            const urls = (html || '').match(/href\\s*=\\s*["']([^"']+)["']/gi) || [];
            resolve(urls.map(s => s.match(/["']([^"']+)["']/)[1]).filter(Boolean).slice(0,150));
          } catch { resolve([]); }
          return;
        }
        const id = this.nextId++;
        this.callbacks.set(id, resolve);
        this.worker.postMessage({ id, type: 'parseHTML', payload: html });
      });
    }
  }

  // --- 8) Request Idle Callback Queue (safe idle/allocation) ---
  class IdleTaskQueue {
    constructor() {
      this.queue = [];
      this.running = false;
    }
    enqueue(fn) {
      if (typeof fn !== 'function') return;
      this.queue.push(fn);
      this._schedule();
    }
    _schedule() {
      if (this.running) return;
      this.running = true;
      const run = (deadline) => {
        try {
          while (this.queue.length && (!deadline || deadline.timeRemaining() > 0)) {
            const t = this.queue.shift();
            if (typeof t === 'function') t();
          }
        } catch {}
        if (this.queue.length) {
          if (typeof requestIdleCallback === 'function') requestIdleCallback(run);
          else setTimeout(() => run({ timeRemaining: () => 50 }), 0);
        } else {
          this.running = false;
        }
      };
      if (typeof requestIdleCallback === 'function') requestIdleCallback(run);
      else setTimeout(() => run({ timeRemaining: () => 50 }), 0);
    }
  }

  // --- 9) Cache API wrapper (persistent) ---
  class CacheManager {
    constructor(cacheName = CACHE_NAME) { this.cacheName = cacheName; }
    async match(request) {
      if (!('caches' in window)) return null;
      try {
        const cache = await caches.open(this.cacheName);
        return await cache.match(request);
      } catch { return null; }
    }
    async put(request, response) {
      if (!('caches' in window)) return;
      try {
        const cache = await caches.open(this.cacheName);
        await cache.put(request, response.clone());
      } catch { }
    }
    async delete(request) {
      if (!('caches' in window)) return;
      try {
        const cache = await caches.open(this.cacheName);
        await cache.delete(request);
      } catch { }
    }
  }

  // --- 10) Prefetcher (Quicklink-style) ---
  class Prefetcher {
    constructor(limit = 6) {
      this.limit = limit;
      this.prefetched = new Set();
      this.init();
    }
    init() {
      if ('IntersectionObserver' in window) {
        const anchors = Array.from(document.querySelectorAll('a[href]'));
        const io = new IntersectionObserver((entries) => {
          entries.forEach(e => {
            if (e.isIntersecting) {
              const a = e.target;
              if (a && a.href) this._prefetch(a.href);
              io.unobserve(a);
            }
          });
        }, { rootMargin: '200px' });
        anchors.forEach(a => io.observe(a));
        this.io = io;
      } else {
        document.addEventListener('mouseover', (ev) => {
          const a = ev.target.closest('a[href]');
          if (a && a.href) this._prefetch(a.href);
        }, { passive: true });
      }
    }
    _prefetch(url) {
      if (!url || this.prefetched.has(url)) return;
      try {
        const u = new URL(url, location.href);
        if (u.origin !== location.origin) return;
      } catch { return; }
      // Lightweight prefetch
      const link = document.createElement('link');
      link.rel = 'prefetch';
      link.href = url;
      document.head.appendChild(link);
      this.prefetched.add(url);
      if (this.prefetched.size > this.limit) {
        const first = Array.from(this.prefetched)[0];
        this.prefetched.delete(first);
      }
    }
  }

  // --- 11) Iframe Sandbox / isolation (minimal wrapper) ---
  class IframeGuard {
    constructor() { this._patch(); }
    _patch() {
      const origSetAttr = HTMLIFrameElement.prototype.setAttribute;
      HTMLIFrameElement.prototype.setAttribute = function(name, value) {
        if (name.toLowerCase() === 'src') {
          try {
            const u = new URL(value, location.href);
            if (u.origin !== location.origin) {
              this.src = 'about:blank';
              this.setAttribute('data-gemini-blocked', 'true');
              return;
            }
          } catch {}
        }
        return origSetAttr.call(this, name, value);
      };
      const origAppend = Element.prototype.appendChild;
      Element.prototype.appendChild = function(el) {
        if (el instanceof HTMLIFrameElement) {
          try {
            const u = new URL(el.src || '', location.href);
            if (u.origin !== location.origin) {
              el.src = 'about:blank';
              el.setAttribute('data-gemini-blocked', 'true');
              return el;
            }
          } catch {}
        }
        return origAppend.call(this, el);
      };
    }
  }

  // --- 12) MutationObserver throttling for dynamic content ---
  // We'll implement as a helper function to reuse in the main class
  function throttleMutationObserver(target, callback, debounceMs = 100) {
    if (!('MutationObserver' in window)) return;
    let timer = null;
    const observer = new MutationObserver((mutations) => {
      if (timer) clearTimeout(timer);
      timer = setTimeout(() => {
        callback(mutations);
        timer = null;
      }, debounceMs);
    });
    observer.observe(target, { childList: true, subtree: true });
    return observer;
  }

  // --- 13) Default Configuration ---
  const defaultConfig = {
    version: CONFIG_VERSION,
    ultraPerformanceMode: true,
    aggressiveCaching: true,
    preloadCriticalResources: true,
    deferAllScripts: true,
    removeAllAnimations: true,
    blockAllTrackers: true,

    enableResourceHints: true,
    enableServiceWorkerCache: true,
    enableMemoryOptimization: true,
    enableGPUAcceleration: true,
    enableWebAssemblyOptimization: true,

    // Network
    enableHTTP2Push: true,
    enableBrotliCompression: true,
    maxParallelRequests: 8,
    requestTimeout: 8000,

    // Caching
    memoryCacheSize: 80,
    diskCacheSize: 400,
    cacheExpiry: 604800000, // 7 days

    logLevel: 2,

    disableAnimations: true,
    lazyLoadElements: true,
    optimizeImages: true,
    disableAutoPlayingMedia: true,
    mobileOptimization: true,
    reduceDOMManipulation: true,
    blockTrackers: true,
    optimizeDataFetching: true,
    apiCacheTTL: 300000,
    staticCacheTTL: 604800000,
    enableRetryOnTimeout: true,
    useStorage: true,
    cacheStaticResources: true,
    removeAdsAndPopups: true,
    removeUnnecessaryScripts: true,
    removeUnnecessaryCSS: true,
    removeExternalFonts: true,
    limitIframes: true,
    disableUnnecessaryWebSockets: true,
    improveLinkHandling: true,
    improveCookieManagement: true,
    disableGeolocation: true,
    disableNotifications: true,
    disableJSInBackgroundTabs: true,
    preventSessionTimeout: true,
    preventRedirects: false,
    limitMemoryLeaks: true
  };

  // Simple in-memory LRU cache (tiny, memory-safe)
  class UltraCache {
    constructor(maxSize = 1000) {
      this.cache = new Map();
      this.maxSize = maxSize;
      this.order = [];
    }
    get(key) {
      if (!this.cache.has(key)) return null;
      // Move to MRU
      const idx = this.order.indexOf(key);
      if (idx > -1) this.order.splice(idx, 1);
      this.order.push(key);
      return this.cache.get(key);
    }
    set(key, value) {
      if (this.cache.size >= this.maxSize && !this.cache.has(key)) {
        const lru = this.order.shift();
        if (lru != null) this.cache.delete(lru);
      }
      this.cache.set(key, value);
      const idx = this.order.indexOf(key);
      if (idx > -1) this.order.splice(idx, 1);
      this.order.push(key);
    }
    clear() { this.cache.clear(); this.order = []; }
  }

  // --- 14) Core Optimizer Class ---
  class GeminiUltraOptimizer {
    constructor() {
      this.config = this.loadConfig();
      this.setupLogger();
      this.metrics = { blocked: 0, cached: 0, optimized: 0, savedBytes: 0 };
      this.elementCache = new UltraCache(1000);
      this.selectorCache = new SelectorCache();
      this.ttlStore = new TTLCacheStore(CACHE_META_KEY);
      this.fontLoader = new DynamicFontLoader();
      this.idleQueue = new IdleTaskQueue();
      this.cacheMgr = new CacheManager(CACHE_NAME);
      this.workerMgr = new WorkerManager();
      this.prefetcher = new Prefetcher(6);
      this.iframeGuard = new IframeGuard();
      // Mutation observer throttling helper
      this.mutationObserver = null;

      // Initialize immediately
      this.initializeUltraMode();

      // DOMReady
      if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => this.onDOMReady(), { once: true, passive: true });
      } else {
        this.onDOMReady();
      }

      // Schedule a safe metrics report
      this.idleQueue.enqueue(() => this.reportMetrics());
    }

    loadConfig() {
      try {
        const stored = GM_getValue(CONFIG_KEY);
        if (stored && typeof stored === 'object') return { ...defaultConfig, ...stored };
      } catch { /* ignore GM unavailability */ }
      return { ...defaultConfig };
    }

    saveConfig() {
      try {
        GM_setValue(CONFIG_KEY, this.config);
        this.log(3, 'Configuration saved. Reloading...');
        window.location.reload();
      } catch (e) {
        this.log(1, `Failed to save config: ${e?.message ?? e}`);
      }
    }

    setupLogger() {
      this.log = (level, msg) => {
        const lvl = this.config?.logLevel ?? 2;
        if (lvl >= level) {
          const color = level === 1 ? '#ff4d4d' : level === 2 ? '#ffd966' : '#6bdc8b';
          console.log(`%c[Gemini Ultra] ${msg}`, `color: ${color}; font-weight: bold;`);
        }
      };
    }

    initializeUltraMode() {
      // Critical preloads
      this.injectCriticalCSS();
      // No-op: placeholder for any additional preloads
      if (this.config.enableGPUAcceleration) this.enableGPUAcceleration();

      // Interceptors and caches
      this.setupNetworkInterceptor();
      this.setupResourceHints();

      // Font loading and mutation observer
      this.fontLoader.loadFromCSS();
      this.mutateThrottleSetup();

      // Memory optimizations
      this.optimizeMemoryUsage();

      // Performance observer (optional)
      this.setupPerformanceObserver();
    }

    injectCriticalCSS() {
      const css = `
        * { animation: none !important; transition: none !important; transform: translateZ(0); }
        html { scroll-behavior: auto !important; }
        body { font-family: system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif !important; text-rendering: optimizeSpeed; }
        .ad, .ads, .advertisement, [id*="ad-"], [class*="ad-"], [class*="banner"], .social-share, .newsletter, .cookie {
          display: none !important; visibility: hidden !important; opacity: 0 !important;
          pointer-events: none !important; position: absolute !important; left: -9999px !important;
        }
      `;
      if (typeof GM_addStyle === 'function') GM_addStyle(css);
    }

    mutateThrottleSetup() {
      // Throttle MutationObserver to batch DOM work
      if (!('MutationObserver' in window)) return;
      const batch = new Set();
      const flush = () => {
        const nodes = Array.from(batch);
        batch.clear();
        nodes.forEach(n => this.optimizeNode(n));
      };
      const observer = new MutationObserver((mutations) => {
        mutations.forEach(m => {
          if (m.type === 'childList') {
            m.addedNodes.forEach(n => { if (n.nodeType === 1) batch.add(n); });
          }
        });
        if (batch.size) this.idleQueue.enqueue(flush);
      });
      observer.observe(document.body, { childList: true, subtree: true });
      this.mutationObserver = observer;
    }

    setupPerformanceObserver() {
      // Optional: lightweight performance telemetry
      if (!('PerformanceObserver' in window)) return;
      try {
        const obs = new PerformanceObserver((list) => {
          for (const entry of list.getEntries()) {
            if (entry.entryType === 'resource' && entry.duration > 1000) {
              this.log(2, `Slow resource: ${entry.name} (${Math.round(entry.duration)}ms)`);
            }
            if (entry.transferSize) {
              this.metrics.savedBytes += (entry.encodedBodySize ?? 0) - entry.transferSize;
            }
          }
        });
        obs.observe({ entryTypes: ['resource', 'navigation', 'paint'] });
      } catch (e) { /* ignore */ }
    }

    setupNetworkInterceptor() {
      const originalFetch = window.fetch.bind(window);
      const cfg = this.config;

      window.fetch = async (resource, init = {}) => {
        const url = (typeof resource === 'string') ? resource : resource?.url;
        if (!url) return originalFetch(resource, init);

        // Block trackers quicker
        if (matchesBlocked(url)) {
          this.metrics.blocked++;
          return new Response('', { status: 204 });
        }

        // Cache-first with Cache API (TTL)
        try {
          const req = (typeof resource === 'string') ? new Request(resource, init) : resource;
          const cached = await this.cacheMgr.match(req);
          if (cached) {
            this.metrics.cached++;
            // Background refresh
            (async () => {
              try {
                const fresh = await originalFetch(req, init);
                if (fresh && fresh.ok) await this.cacheMgr.put(req, fresh.clone());
              } catch { /* ignore */ }
            })();
            return cached.clone();
          }
        } catch { /* ignore cache errors gracefully */ }

        // Network fetch
        try {
          const controller = new AbortController();
          const timer = setTimeout(() => controller.abort(), cfg.requestTimeout);
          const resp = await originalFetch(resource, { ...init, signal: controller.signal });
          clearTimeout(timer);
          if (resp && resp.ok) {
            try {
              const req = (typeof resource === 'string') ? new Request(resource, init) : resource;
              await this.cacheMgr.put(req, resp.clone());
              this.ttlStore.set(req.url, cfg.apiCacheTTL);
            } catch { /* ignore */ }
          }
          return resp;
        } catch (e) {
          if (cfg.enableRetryOnTimeout && e?.name === 'AbortError') {
            try { return await originalFetch(resource, init); } catch { throw e; }
          }
          throw e;
        }
      };

      // XHR interception
      const XHR = XMLHttpRequest.prototype;
      const origOpen = XHR.open;
      const origSend = XHR.send;
      XHR.open = function (method, url, ...args) {
        this._gemini_url = url; this._gemini_method = method;
        return origOpen.call(this, method, url, ...args);
      };
      XHR.send = function (...args) {
        const url = this._gemini_url;
        if (url) {
          try {
            if (matchesBlocked(url)) {
              this.abort();
              return;
            }
          } catch {}
        }
        return origSend.call(this, ...args);
      };
    }

    onDOMReady() {
      this.log(3, 'DOM ready, applying optimizations...');
      this.applyDOMOptimizations();
      this.setupDynamicContentObserver();
      this.setupLazyLoadingObserver();
      this.optimizeScripts();
      this.postLoadCleanup();
      // Phase 2: idle tasks
      this.idleQueue.enqueue(() => this.reportMetrics());
    }

    setupResourceHints() {
      // Preconnect to discovered origins; gate by network type
      const origins = new Set();
      document.querySelectorAll('link[href], script[src], img[src]').forEach(el => {
        const url = el.href || el.src;
        if (!url) return;
        try {
          const u = new URL(url, location.href);
          if (u.origin !== location.origin && !matchesBlocked(url)) {
            origins.add(u.origin);
          }
        } catch { /* ignore */ }
      });
      origins.forEach(origin => {
        const link = document.createElement('link');
        link.rel = 'preconnect';
        link.href = origin;
        link.crossOrigin = 'anonymous';
        document.head.appendChild(link);
      });
      // Lightweight preloads
      document.querySelectorAll('link[rel="stylesheet"][href], script[src]').forEach(el => {
        const href = el.href || el.getAttribute('src') || '';
        if (!href) return;
        if (matchesBlocked(href)) return;
        const pre = document.createElement('link');
        pre.rel = 'preload';
        pre.as = href.endsWith('.css') ? 'style' : 'script';
        pre.href = href;
        document.head.appendChild(pre);
      });
    }

    enableGPUAcceleration() {
      // Simple, safe GPU hints
      const style = document.createElement('style');
      style.textContent = `
        body { transform: translateZ(0); will-change: transform; }
        img, video, canvas, iframe { will-change: transform; }
      `;
      document.head.appendChild(style);
    }

    setupEventListenerOptimizer() {
      // Throttle common high-frequency listeners
      if (!('addEventListener' in EventTarget.prototype)) return;
      // Simple global patch could be extended if desired
    }

    optimizeMemoryUsage() {
      // Debounced memory cleanup on visibility change
      const cleanup = () => {
        if (window.gc) {
          try { window.gc(); } catch {}
        }
        // Evict old in-memory caches if needed
        if (this.elementCache && this.elementCache.cache && this.elementCache.cache.size > 800) {
          const toRemove = this.elementCache.cache.size - 800;
          const keys = Array.from(this.elementCache.cache.keys()).slice(0, toRemove);
          keys.forEach(k => this.elementCache.cache.delete(k));
        }
      };
      document.addEventListener('visibilitychange', () => {
        if (document.visibilityState === 'hidden') this.idleQueue.enqueue(cleanup);
      });
      window.addEventListener('beforeunload', cleanup);
      // Periodic extra cleanup
      const t = setInterval(cleanup, 30000);
      this.timers = this.timers || [];
      this.timers.push(t);
    }

    setupDynamicContentObserver() {
      // Debounced/batched mutation handling
      if (!('MutationObserver' in window)) return;
      const batch = new Set();
      const flush = () => {
        const nodes = Array.from(batch);
        batch.clear();
        nodes.forEach(n => this.optimizeNode(n));
      };
      const obs = new MutationObserver((mutations) => {
        mutations.forEach(m => {
          if (m.type === 'childList') {
            m.addedNodes.forEach(n => { if (n.nodeType === 1) batch.add(n); });
          }
        });
        this.idleQueue.enqueue(flush);
      });
      obs.observe(document.body, { childList: true, subtree: true });
      this._dynamicObs = obs;
    }

    setupLazyLoadingObserver() {
      if (!('IntersectionObserver' in window)) return;
      const io = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
          if (entry.isIntersecting) {
            const img = entry.target;
            if (img.dataset.src && !img.src) {
              img.src = img.dataset.src;
              img.removeAttribute('data-src');
            }
            if (img.dataset.webpSrc && this.supportsWebP()) {
              img.src = img.dataset.webpSrc;
              img.removeAttribute('data-webp-src');
            }
            io.unobserve(img);
          }
        });
      }, { rootMargin: '50px 0px', threshold: 0.01 });
      document.querySelectorAll('img[data-src], img[data-webp-src]').forEach(img => io.observe(img));
      this._lazyIO = io;
    }

    optimizeNode(node) {
      if (!node || !node.querySelectorAll) return;
      // Quick cleanup in given node
      const unwanted = node.querySelectorAll('.ad, .popup, .modal, [class*="ad-"], [id*="ad-"]');
      unwanted.forEach(el => el.remove());

      // Images inside the node
      node.querySelectorAll('img').forEach(img => {
        if (!img.loading) img.loading = 'lazy';
        if (!img.decoding) img.decoding = 'async';
        this.metrics.optimized++;
      });

      // Iframes
      node.querySelectorAll('iframe').forEach(iframe => {
        const src = iframe.src || iframe.getAttribute('src') || '';
        if (src && matchesBlocked(src)) {
          iframe.remove();
          this.metrics.blocked = (this.metrics.blocked || 0) + 1;
          return;
        }
        if (!iframe.loading) iframe.loading = 'lazy';
        if (!iframe.sandbox) iframe.sandbox = 'allow-scripts allow-same-origin';
      });
    }

    optimizeMedia() {
      document.querySelectorAll('video').forEach(video => {
        try { video.preload = 'metadata'; } catch {}
        video.autoplay = false;
        if (video.muted === false) video.muted = true;
        video.removeAttribute('autoplay');
        if (!video.paused) video.pause();
        this.metrics.optimized++;
      });
      document.querySelectorAll('audio').forEach(audio => {
        audio.preload = 'metadata';
        audio.autoplay = false;
        audio.muted = true;
        if (!audio.paused) audio.pause();
        this.metrics.optimized++;
      });
    }

    optimizeAllImages() {
      const images = document.querySelectorAll('img');
      const viewportHeight = window.innerHeight;
      images.forEach((img, index) => {
        if (img.dataset.optimized) return;
        if (!img.loading) img.loading = index < 3 ? 'eager' : 'lazy';
        if (!img.decoding) img.decoding = 'async';
        try {
          if (index < 3 && img.getBoundingClientRect().top < viewportHeight) img.fetchpriority = 'high';
        } catch {}
        // WebP hint
        const src = img.src || img.dataset.src;
        if (src && !src.includes('.webp') && /\.(jpg|jpeg|png)$/i.test(src)) {
          img.dataset.webpSrc = src.replace(/\.(jpg|jpeg|png)$/i, '.webp');
        }
        img.dataset.optimized = 'true';
        this.metrics.optimized++;
      });
    }

    cleanupCSS() {
      document.querySelectorAll('link[rel="stylesheet"]').forEach(link => {
        const href = link.href || '';
        try {
          if (href && matchesBlocked(href)) {
            link.remove();
            this.metrics.blocked = (this.metrics.blocked || 0) + 1;
          }
        } catch {}
      });
      document.querySelectorAll('[style*="animation"], [style*="transition"]').forEach(el => {
        const style = el.getAttribute('style') || '';
        const newStyle = style.replace(/animation[^;]+;?/gi, '').replace(/transition[^;]+;?/gi, '');
        el.setAttribute('style', newStyle);
        this.metrics.optimized++;
      });
    }

    supportsWebP() {
      try {
        const c = document.createElement('canvas');
        c.width = c.height = 1;
        return c.toDataURL('image/webp').indexOf('image/webp') > -1;
      } catch { return false; }
    }

    optimizeFonts() {
      // Remove Google Fonts (as part of blocking)
      document.querySelectorAll('link[href*="fonts.googleapis.com"], link[href*="fonts.gstatic.com"]')
        .forEach(l => { l.remove(); this.metrics.blocked++; });

      // Preload font cleanup
      document.querySelectorAll('link[rel="preload"][as="font"]').forEach(l => {
        l.remove(); this.metrics.blocked++;
      });

      // Load dynamic fonts
      this.fontLoader.loadFromCSS();
    }

    optimizeScripts() {
      const scripts = document.querySelectorAll('script');
      scripts.forEach(script => {
        const src = script.src || '';
        if (src) {
          try {
            const host = new URL(src, location.href).hostname;
            if (matchesBlocked(src)) {
              script.remove(); this.metrics.blocked++;
              return;
            }
            if (!script.async && !script.defer) {
              script.defer = true;
              this.metrics.optimized++;
            }
          } catch {}
        } else {
          const content = script.textContent || '';
          if (/(google-analytics|gtag|fbq|_gaq|analytics|tracking)/i.test(content)) {
            script.remove(); this.metrics.blocked++;
          }
        }
      });
    }

    postLoadCleanup() {
      // Remove empty style tags
      document.querySelectorAll('style').forEach(style => {
        if (!style.textContent || style.textContent.trim() === '') style.remove();
      });
      // Remove comments
      const it = document.createNodeIterator(document.body, NodeFilter.SHOW_COMMENT, null, false);
      const toRemove = [];
      let node;
      while ((node = it.nextNode())) toRemove.push(node);
      toRemove.forEach(n => n.remove());
    }

    reportMetrics() {
      const elapsed = performance.now(); // approx
      const report = `
Performance Report:
- Uptime snapshot: ${Math.round(elapsed)}ms
- Blocked requests: ${this.metrics.blocked}
- Cached requests: ${this.metrics.cached}
- Optimized elements: ${this.metrics.optimized}
- Estimated data saved: ${(this.metrics.savedBytes / 1024).toFixed(2)} KB
      `;
      this.log(3, report);
    }

    logBlockEntry(kind, msg) {
      this.log(2, `[Block ${kind}] ${msg}`);
    }

    log(levelMsg, msg) {
      if (!this.config || this.config.logLevel == null) return;
      const lvl = this.config.logLevel;
      if (lvl >= levelMsg) {
        console.log(`%c[Gemini Ultra] ${msg}`, 'color: #28a745; font-weight: bold;');
      }
    }

    setupMenuCommands() {
      try {
        GM_registerMenuCommand('🚀 Toggle Ultra Performance Mode', () => {
          this.config.ultraPerformanceMode = !this.config.ultraPerformanceMode;
          this.saveConfig();
        });
        GM_registerMenuCommand('💾 Toggle Aggressive Caching', () => {
          this.config.aggressiveCaching = !this.config.aggressiveCaching;
          this.saveConfig();
        });
        GM_registerMenuCommand('🚫 Toggle Ad Blocking', () => {
          this.config.removeAdsAndPopups = !this.config.removeAdsAndPopups;
          this.saveConfig();
        });
        GM_registerMenuCommand('📊 Show Performance Metrics', () => this.reportMetrics());
        GM_registerMenuCommand('🔧 Reset Configuration', () => {
          if (confirm('Reset all settings to default?')) {
            GM_setValue(CONFIG_KEY, { version: CONFIG_VERSION });
            window.location.reload();
          }
        });
      } catch { /* GM missing */ }
    }

    // Utility: Supports webp (tiny helper)
    supportsWebP() {
      try {
        const c = document.createElement('canvas');
        c.width = c.height = 1;
        return c.toDataURL('image/webp').indexOf('image/webp') > -1;
      } catch { return false; }
    }

    // Cleanup on unload
    cleanup() {
      if (this.mutationObserver) this.mutationObserver.disconnect();
      if (this._dynamicObs) this._dynamicObs.disconnect();
      this.elementCache.clear();
      this.selectorCache.clear();
    }
  }

  // Instantiate the optimizer
  try {
    new GeminiUltraOptimizer();
  } catch (e) {
    console.error('[Gemini Ultra] Failed to initialize:', e);
  }

})();