YouTube Performance Booster HYPER

Maximum low-level optimizations: tames ytcfg experiment flags, bypasses useless logging, pauses hover/transitions during scroll for flawless FPS, throttles ambient glow, and safely mitigates memory leaks. Zero UI changes.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         YouTube Performance Booster HYPER
// @name:ru      Гипер-оптимизатор YouTube (Без изменения интерфейса)
// @namespace    http://tampermonkey.net/
// @version      4.0
// @description  Maximum low-level optimizations: tames ytcfg experiment flags, bypasses useless logging, pauses hover/transitions during scroll for flawless FPS, throttles ambient glow, and safely mitigates memory leaks. Zero UI changes.
// @description:ru Низкоуровневые оптимизации: перехватывает конфигурацию ytcfg, отключает фоновое логирование, замораживает hover-эффекты при скролле для максимального FPS, оптимизирует память и эмбиент. Без изменений интерфейса.
// @author       torch
// @match        https://*.youtube.com/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // --- 1. ПЕРЕХВАТ И ОПТИМИЗАЦИЯ YTCFG (EXPERIMENT FLAGS) ---
    // На лету перехватывает конфигурацию YouTube и отключает ресурсоемкое фоновое логирование.
    function optimizeConfig(cfg) {
        if (!cfg) return;
        if (cfg.EXPERIMENT_FLAGS) {
            cfg.EXPERIMENT_FLAGS.web_attention_logging_scroll_throttle = 1500; // Реже трекать внимание при прокрутке
            cfg.EXPERIMENT_FLAGS.log_window_onerror_fraction = 0.0;            // Отключить отправку логов ошибок на сервер
        }
        if (cfg.web_attention_logging_scroll_throttle !== undefined) cfg.web_attention_logging_scroll_throttle = 1500;
        if (cfg.log_window_onerror_fraction !== undefined) cfg.log_window_onerror_fraction = 0.0;
        if (cfg.polymer_property_access_logging_percent !== undefined) cfg.polymer_property_access_logging_percent = 0.0;
    }

    let ytcfgVal = window.ytcfg;
    Object.defineProperty(window, 'ytcfg', {
        get() { return ytcfgVal; },
        set(newVal) {
            ytcfgVal = newVal;
            if (ytcfgVal && typeof ytcfgVal.set === 'function' && !ytcfgVal.set.isPatched) {
                const originalSet = ytcfgVal.set;
                ytcfgVal.set = function(key, val) {
                    if (typeof key === 'object') {
                        optimizeConfig(key);
                    } else if (key === 'EXPERIMENT_FLAGS' && val) {
                        optimizeConfig({ EXPERIMENT_FLAGS: val });
                    }
                    return originalSet.apply(this, arguments);
                };
                ytcfgVal.set.isPatched = true;
            }
        },
        configurable: true
    });

    if (window.ytcfg && typeof window.ytcfg.set === 'function') {
        optimizeConfig(window.ytcfg);
    }

    // --- 2. УСТРАНЕНИЕ ЛАГОВ ПРИ СКРОЛЛИНГЕ (TRANSITION SUSPENDER) ---
    // Отключает hover-эффекты и анимации строго на время прокрутки. Поднимает FPS до стабильных 60/120/144 Гц.
    const disableHoverStyles = document.createElement('style');
    disableHoverStyles.id = 'yt-scroll-hover-disable';
    disableHoverStyles.textContent = `
        body.is-scrolling * {
            pointer-events: none !important;
            transition: none !important;
            animation-play-state: paused !important;
        }
    `;
    document.documentElement.appendChild(disableHoverStyles);

    let isScrollingTimeout;
    window.addEventListener('scroll', () => {
        window.clearTimeout(isScrollingTimeout);
        if (!document.body.classList.contains('is-scrolling')) {
            document.body.classList.add('is-scrolling');
        }
        isScrollingTimeout = setTimeout(() => {
            document.body.classList.remove('is-scrolling');
        }, 150);
    }, { passive: true });

    // --- 3. ОЧИСТКА ПАМЯТИ ПРИ НАВИГАЦИИ (SPA GC ASSIST) ---
    // Предотвращает утечки ОЗУ при переходе от одного видео к другому.
    window.addEventListener('yt-navigate-start', () => {
        // Очищаем кэшированные браузером изображения и тяжелые неактивные элементы
        window.clearTimeout(isScrollingTimeout);
        if (typeof window.gc === 'function') {
            try { window.gc(); } catch(e) {}
        }
    }, { passive: true });

    // --- 4. ОГРАНИЧЕНИЕ ЭМБИЕНТ-СВЕЧЕНИЯ ПЛЕЕРА ---
    const originalGetContext = HTMLCanvasElement.prototype.getContext;
    HTMLCanvasElement.prototype.getContext = function(type, attributes) {
        const context = originalGetContext.call(this, type, attributes);
        if (type === '2d' && (this.id === 'cinematic' || this.classList.contains('ytp-glow-canvas') || this.closest('#cinematic-container'))) {
            const originalDrawImage = context.drawImage;
            let lastDrawTime = 0;
            context.drawImage = function(...args) {
                const now = performance.now();
                if (now - lastDrawTime < 50) return; // Лимит 20 FPS для размытого свечения
                lastDrawTime = now;
                return originalDrawImage.apply(this, args);
            };
        }
        return context;
    };

    // --- 5. ОГРАНИЧЕНИЕ ЧАСТОТЫ LAYOUT OBSERVERS ---
    const OriginalResizeObserver = window.ResizeObserver;
    window.ResizeObserver = class ThrottledResizeObserver extends OriginalResizeObserver {
        constructor(callback) {
            let timeout;
            const throttledCallback = (entries, observer) => {
                if (timeout) return;
                timeout = setTimeout(() => {
                    callback(entries, observer);
                    timeout = null;
                }, 30);
            };
            super(throttledCallback);
        }
    };

    // --- 6. КОРРЕКТИРОВКА ЧАСТОТЫ ФОНОВЫХ ТАЙМЕРОВ ---
    const originalSetInterval = window.setInterval;
    window.setInterval = function(fn, delay, ...args) {
        if (delay > 0 && delay < 100) {
            delay = 100;
        }
        return originalSetInterval.call(window, fn, delay, ...args);
    };

    // --- 7. БЛОКИРОВКА ИЗБЫТОЧНОЙ СЕТЕВОЙ ТЕЛЕМЕТРИИ ---
    const originalSendBeacon = Navigator.prototype.sendBeacon;
    Navigator.prototype.sendBeacon = function(url, data) {
        if (url.includes('/csi_204') || url.includes('/error_204') || url.includes('/api/stats/qoe')) {
            if (Math.random() > 0.2) return true;
        }
        return originalSendBeacon.call(this, url, data);
    };

    // --- 8. ОГРАНИЧЕНИЕ МЫШИ НА PROGRESS BAR ---
    let lastMoveTime = 0;
    document.addEventListener('mousemove', (e) => {
        const now = performance.now();
        if (e.target.closest && e.target.closest('.ytp-progress-bar')) {
            if (now - lastMoveTime < 16.6) {
                e.stopPropagation();
            } else {
                lastMoveTime = now;
            }
        }
    }, { passive: true, capture: true });

    // --- 9. ПАССИВНЫЕ ОБРАБОТЧИКИ СОБЫТИЙ ДЛЯ СКРОЛЛА ---
    const originalAddEventListener = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function(type, listener, options) {
        if (['touchstart', 'touchmove', 'wheel', 'mousewheel'].includes(type)) {
            if (typeof options === 'boolean') {
                options = { passive: true, capture: options };
            } else if (typeof options === 'object') {
                options.passive = options.passive !== undefined ? options.passive : true;
            } else {
                options = { passive: true };
            }
        }
        return originalAddEventListener.call(this, type, listener, options);
    };

    // --- 10. АСИНХРОННОЕ ДЕКОДИРОВАНИЕ ИЗОБРАЖЕНИЙ ---
    const originalCreateElement = Document.prototype.createElement;
    Document.prototype.createElement = function(tagName, options) {
        const element = originalCreateElement.call(this, tagName, options);
        if (tagName.toLowerCase() === 'img') {
            element.setAttribute('decoding', 'async');
        }
        return element;
    };

    // --- 11. ОПТИМАЛЬНЫЕ CSS-ПРАВИЛА Отрисовки ---
    const injectOptimizeStyles = () => {
        if (document.head) {
            const style = document.createElement('style');
            style.id = 'yt-perf-optimizer-hyper-styles';
            style.textContent = `
                ytd-rich-grid-renderer,
                ytd-rich-item-renderer,
                ytd-video-renderer,
                ytd-compact-video-renderer,
                ytd-comment-thread-renderer,
                #player-container,
                .html5-video-container,
                #columns {
                    will-change: transform;
                    transform: translateZ(0);
                    backface-visibility: hidden;
                    perspective: 1000px;
                }

                ytd-rich-item-renderer,
                ytd-comment-thread-renderer,
                ytd-compact-video-renderer {
                    content-visibility: auto;
                    contain-intrinsic-size: auto 320px;
                }

                img {
                    content-visibility: auto;
                }
            `;
            document.head.appendChild(style);
        } else {
            setTimeout(injectOptimizeStyles, 10);
        }
    };

    injectOptimizeStyles();
})();