Optimized Web Accelerator

Combina aceleração de renderização com economia de dados de forma segura e estável

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Tendrás que instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Tendrás que instalar una extensión como Tampermonkey antes de poder instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Optimized Web Accelerator
// @namespace    https://github.com/optimized-web
// @version      1.0
// @description  Combina aceleração de renderização com economia de dados de forma segura e estável
// @author       Optimized Web Team
// @match        *://*/*
// @run-at       document-start
// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_registerMenuCommand
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // ==========================================
    // CONFIGURAÇÃO - Controle de funcionalidades
    // ==========================================
    const CONFIG = {
        // Performance (do PureRender)
        disableSmoothScroll: true,
        removeBlockingElements: true,
        disableHeavyEffects: true,
        unlockScroll: true,
        
        // Economia de Dados (do Ultra Data Saver - versão segura)
        blockTrackers: true,
        compressImages: true,
        blockAutoplay: true,
        removeWebFonts: false,        // Mantido false para não quebrar layouts
        removeAnimations: false,      // Mantido false para não quebrar UX
        lazyLoadImages: false,        // Usa eager do PureRender
        blockAggressiveAds: true,     // Apenas anúncios óbvios
        
        // Controles de segurança
        preserveMainContent: true,
        allowUserInteraction: true,
        smartBlocking: true
    };

    // ==========================================
    // EXCLUSÕES AUTOMÁTICAS
    // ==========================================
    const host = location.hostname;
    
    // YouTube já tem otimização própria
    if (host.includes("youtube.com") || host.includes("youtu.be")) return;
    
    // Sites críticos que não devem ser otimizados agressivamente
    const CRITICAL_SITES = [
        'github.com', 'stackoverflow.com', 'web.whatsapp.com',
        'mail.google.com', 'outlook.live.com', 'bankofamerica.com'
    ];
    
    if (CRITICAL_SITES.some(site => host.includes(site))) {
        CONFIG.blockAggressiveAds = false;
        CONFIG.compressImages = false;
    }

    // Exclusões do usuário
    const userExcluded = GM_getValue("excluded_sites", []) || [];
    if (userExcluded.includes(host)) return;

    // ==========================================
    // LISTAS DE BLOQUEIO (versão conservadora)
    // ==========================================
    const TRACKER_DOMAINS = [
        'google-analytics', 'googletagmanager', 'googlesyndication',
        'googleadservices', 'doubleclick', 'facebook.com/tr',
        'facebook.net', 'connect.facebook', 'analytics.twitter',
        'linkedin.com/analytics', 'adsystem', 'amazon-adsystem',
        'googletagservices', 'outbrain', 'taboola', 'scorecardresearch',
        'quantserve', 'hotjar', 'mixpanel', 'segment.io', 'amplitude'
    ];

    const AGGRESSIVE_AD_SELECTORS = [
        'ins.adsbygoogle', '.ad-container', '.ad-wrapper',
        '[class*="ad-"]', '[class*="ads-"]', '[id*="ad-"]',
        '[class*="advertisement"]', '[id*="advertisement"]'
    ];

    const BLOCKING_SELECTORS = [
        '[class*="preloader"]', '[id*="preloader"]', 
        '[class*="loading-overlay"]', '[class*="skeleton"]',
        '.loading', '.spinner', '#loader'
    ];

    // ==========================================
    // FUNÇÕES UTILITÁRIAS
    // ==========================================
    const isTracker = (url) => {
        if (!url) return false;
        const lowerUrl = url.toLowerCase();
        return TRACKER_DOMAINS.some(domain => lowerUrl.includes(domain));
    };

    const isAdElement = (element) => {
        return AGGRESSIVE_AD_SELECTORS.some(selector => {
            try {
                return element.matches && element.matches(selector);
            } catch (e) {
                return false;
            }
        });
    };

    const isBlockingElement = (element) => {
        return BLOCKING_SELECTORS.some(selector => {
            try {
                return element.matches && element.matches(selector);
            } catch (e) {
                return false;
            }
        });
    };

    // ==========================================
    // 1. ESTILOS DE OTIMIZAÇÃO (seguros)
    // ==========================================
    GM_addStyle(`
        /* Desabilitar smooth scroll para resposta instantânea */
        ${CONFIG.disableSmoothScroll ? `
        html, body {
            scroll-behavior: auto !important;
        }` : ''}

        /* Garantir visibilidade do conteúdo */
        html, body {
            visibility: visible !important;
            opacity: 1 !important;
        }

        /* Remover elementos bloqueantes */
        ${CONFIG.removeBlockingElements ? `
        ${BLOCKING_SELECTORS.join(', ')} {
            display: none !important;
            visibility: hidden !important;
            pointer-events: none !important;
        }` : ''}

        /* Reduzir efeitos pesados de GPU */
        ${CONFIG.disableHeavyEffects ? `
        * {
            backdrop-filter: none !important;
            -webkit-backdrop-filter: none !important;
            text-shadow: none !important;
            box-shadow: none !important;
        }` : ''}

        /* Otimização de renderização de imagem */
        img {
            image-rendering: -webkit-optimize-contrast;
            image-rendering: crisp-edges;
        }

        /* Animações mínimas (se habilitado) */
        ${CONFIG.removeAnimations ? `
        *, *::before, *::after {
            animation-duration: 0.01ms !important;
            animation-iteration-count: 1 !important;
            transition-duration: 0.01ms !important;
        }` : ''}
    `);

    // ==========================================
    // 2. BLOQUEIO DE RASTREADORES (seguro)
    // ==========================================
    if (CONFIG.blockTrackers) {
        // Intercepta fetch
        const originalFetch = window.fetch;
        window.fetch = function(...args) {
            const url = args[0] instanceof Request ? args[0].url : args[0];
            if (isTracker(url)) {
                return Promise.resolve(new Response('', { status: 200 }));
            }
            return originalFetch.apply(this, args);
        };

        // Intercepta scripts
        const originalAppendChild = Element.prototype.appendChild;
        Element.prototype.appendChild = function(node) {
            if (node.tagName === 'SCRIPT' && node.src && isTracker(node.src)) {
                return node;
            }
            return originalAppendChild.call(this, node);
        };
    }

    // ==========================================
    // 3. OTIMIZAÇÃO DE IMAGENS (segura)
    // ==========================================
    if (CONFIG.compressImages) {
        const optimizeImage = (img) => {
            // Não otimizar ícones pequenos
            if (img.width < 32 && img.height < 32) return;

            const src = img.src;
            if (!src || src.startsWith('data:')) return;

            // Otimização para CDNs conhecidos
            if (src.includes('googleusercontent') || src.includes('ggpht')) {
                img.src = src.replace(/=s\d+/, '=s800').replace(/=w\d+/, '=w800');
            } else if (src.includes('cloudinary')) {
                img.src = src.replace('/upload/', '/upload/q_auto:good,w_800/');
            }

            // Carregamento imediato (PureRender approach)
            img.loading = 'eager';
            img.decoding = 'async';
        };

        // Processar imagens existentes
        const processImages = () => {
            document.querySelectorAll('img').forEach(optimizeImage);
        };

        // Observer para novas imagens
        const imgObserver = new MutationObserver((mutations) => {
            mutations.forEach((mutation) => {
                mutation.addedNodes.forEach((node) => {
                    if (node.tagName === 'IMG') optimizeImage(node);
                    if (node.querySelectorAll) {
                        node.querySelectorAll('img').forEach(optimizeImage);
                    }
                });
            });
        });

        imgObserver.observe(document.body || document.documentElement, {
            childList: true,
            subtree: true
        });

        // Processar imagens quando disponíveis
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', processImages);
        } else {
            processImages();
        }
    }

    // ==========================================
    // 4. CONTROLE DE AUTOPLAY (seguro)
    // ==========================================
    if (CONFIG.blockAutoplay) {
        // Bloquear autoplay apenas se não for iniciado pelo usuário
        const originalPlay = HTMLMediaElement.prototype.play;
        HTMLMediaElement.prototype.play = function() {
            // Heurística simples: se não tiver interação do usuário, bloquear
            if (!this.hasAttribute('data-user-initiated') && 
                !this.closest('[data-user-interacted]')) {
                this.pause();
                this.muted = true;
                return Promise.resolve();
            }
            return originalPlay.call(this);
        };

        // Preparar elementos de mídia
        const prepareMedia = () => {
            document.querySelectorAll('video, audio').forEach(media => {
                media.preload = 'metadata';
                media.autoplay = false;
            });
        };

        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', prepareMedia);
        } else {
            prepareMedia();
        }
    }

    // ==========================================
    // 5. REMOÇÃO DE ANÚNCIOS (conservadora)
    // ==========================================
    if (CONFIG.blockAggressiveAds) {
        const removeAds = () => {
            AGGRESSIVE_AD_SELECTORS.forEach(selector => {
                try {
                    document.querySelectorAll(selector).forEach(el => {
                        // Não remover conteúdo principal
                        if (el.tagName === 'ARTICLE' || el.tagName === 'MAIN' || 
                            el.tagName === 'SECTION') return;
                        
                        // Verificar se não é conteúdo importante
                        const hasContent = el.textContent.trim().length > 100;
                        if (!hasContent || isAdElement(el)) {
                            el.style.display = 'none';
                        }
                    });
                } catch (e) {
                    // Ignorar erros de seletor inválido
                }
            });
        };

        // Executar após carregamento
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', removeAds);
            setTimeout(removeAds, 2000);
        } else {
            removeAds();
            setTimeout(removeAds, 2000);
        }
    }

    // ==========================================
    // 6. LIBERAÇÃO DE SCROLL (PureRender)
    // ==========================================
    if (CONFIG.unlockScroll) {
        const unlockScroll = () => {
            const style = getComputedStyle(document.body);
            if (style.overflow === 'hidden' || style.position === 'fixed') {
                document.body.style.setProperty("overflow", "auto", "important");
                document.body.style.setProperty("position", "static", "important");
                document.documentElement.style.setProperty("overflow", "auto", "important");
            }
        };

        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', unlockScroll);
            window.addEventListener('load', unlockScroll);
        } else {
            unlockScroll();
        }
    }

    // ==========================================
    // 7. MENU DE CONTROLE
    // ==========================================
    GM_registerMenuCommand("🚫 Excluir este site", () => {
        const currentExcluded = GM_getValue("excluded_sites", []);
        if (!currentExcluded.includes(host)) {
            currentExcluded.push(host);
            GM_setValue("excluded_sites", currentExcluded);
            location.reload();
        }
    });

    GM_registerMenuCommand("🔄 Limpar exclusões", () => {
        if (confirm("Limpar todas as exclusões de sites?")) {
            GM_setValue("excluded_sites", []);
            location.reload();
        }
    });

    // ==========================================
    // 8. INDICADOR VISUAL SUTIL
    // ==========================================
    window.addEventListener('load', () => {
        setTimeout(() => {
            const indicator = document.createElement('div');
            indicator.style.cssText = `
                position: fixed;
                top: 10px;
                right: 10px;
                background: rgba(76, 175, 80, 0.9);
                color: white;
                padding: 8px 12px;
                border-radius: 4px;
                font-size: 11px;
                font-family: system-ui;
                z-index: 999999;
                pointer-events: none;
                opacity: 0;
                transition: opacity 0.3s;
            `;
            indicator.textContent = '⚡ Web Accelerator';
            document.body.appendChild(indicator);
            
            // Fade in e out
            setTimeout(() => indicator.style.opacity = '1', 100);
            setTimeout(() => {
                indicator.style.opacity = '0';
                setTimeout(() => indicator.remove(), 300);
            }, 3000);
        }, 1000);
    });

})();