Discord Web Ultra Performance Optimizer

Discord web için tüm ağır DOM, animasyon ve eventleri optimize ederek CPU ve RAM kullanımını minimize eder

当前为 2025-08-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         Discord Web Ultra Performance Optimizer
// @namespace    http://tampermonkey.net/
// @version      2.2.0
// @description  Discord web için tüm ağır DOM, animasyon ve eventleri optimize ederek CPU ve RAM kullanımını minimize eder
// @license      MIT
// @author       Sefa AVAN
// @match        https://discord.com/*
// @run-at       document-start
// ==/UserScript==


(function() {
    'use strict';

    // ---------- 1) Animasyon ve transition kapatma ----------
    const style = document.createElement('style');
    style.textContent = `
        * { transition: none !important; animation: none !important; }
        img.emoji { image-rendering: pixelated; }
    `;
    document.head.appendChild(style);

    // ---------- 2) Event throttling ----------
    const throttleMs = 50;
    const last = {};
    ['mousemove','pointermove','scroll','resize'].forEach(type => {
        window.addEventListener(type, e => {
            const now = performance.now();
            if(last[type] && now - last[type] < throttleMs){
                e.stopImmediatePropagation();
                e.stopPropagation();
                return;
            }
            last[type] = now;
        }, true);
    });

    // ---------- 3) Lazy-load ağır DOM öğeleri ----------
    function lazyLoadElements(selector){
        document.querySelectorAll(selector).forEach(el=>{
            if(!el.dataset.lazy){
                el.dataset.lazy='1';
                el.style.display='none';
                const obs = new IntersectionObserver(entries=>{
                    if(entries[0].isIntersecting){
                        el.style.display='';
                        obs.disconnect();
                    }
                },{rootMargin:'2000px'});
                obs.observe(el);
            }
        });
    }
    function applyLazyLoad(){ lazyLoadElements('.emoji-picker,.gift-preview,.activity-feed'); }

    // ---------- 4) Arka plan sekmede GIF ve videoları durdur ----------
    function manageBackgroundMedia(){
        document.querySelectorAll('img[src$=".gif"],video').forEach(el=>{
            if(document.hidden) el.pause ? el.pause() : el.style.display='none';
            else el.play ? el.play() : el.style.display='';
        });
    }
    document.addEventListener('visibilitychange', manageBackgroundMedia);

    // ---------- 5) Mesaj virtualization ve cache ----------
    const messageCache = new Map();
    function virtualizeMessages(){
        const messages = document.querySelectorAll('[id^="message-"]');
        const buffer = 5;
        const viewportTop = 0;
        const viewportBottom = window.innerHeight;

        messages.forEach((msg,idx)=>{
            const rect = msg.getBoundingClientRect();
            const inViewportBuffer = rect.bottom >= viewportTop - buffer*rect.height &&
                                     rect.top <= viewportBottom + buffer*rect.height;
            if(!inViewportBuffer){
                if(!messageCache.has(msg.id)) messageCache.set(msg.id,msg.cloneNode(true));
                msg.remove();
            } else if(messageCache.has(msg.id) && !document.getElementById(msg.id)){
                const cached = messageCache.get(msg.id);
                msg.parentNode.insertBefore(cached,msg);
                messageCache.delete(msg.id);
            }
        });
    }

    // ---------- 6) Video ve GIF RAM optimizasyonu ----------
    function manageMediaMemory(media){
        const rect = media.getBoundingClientRect();
        const inViewport = rect.bottom>0 && rect.top<window.innerHeight;

        if(!inViewport && media.src){
            media.dataset.srcBackup=media.src;
            media.src='';
            media.pause();
        } else if(inViewport && !media.src && media.dataset.srcBackup){
            media.src=media.dataset.srcBackup;
            delete media.dataset.srcBackup;
            media.muted=true;
            media.controls=true;
        }
    }

    function stopAutoplay(media){
        media.pause();
        media.autoplay=false;
        media.muted=true;
        media.controls=true;
    }

    // Başlangıçta mevcut videolar
    document.querySelectorAll('video').forEach(v=>{
        stopAutoplay(v);
        manageMediaMemory(v);
    });

    // Yeni eklenen videoları izle
    const mediaObserver = new MutationObserver(mutations=>{
        mutations.forEach(mutation=>{
            mutation.addedNodes.forEach(node=>{
                if(node.tagName==='VIDEO'||node.tagName==='IMG'){
                    stopAutoplay(node);
                    manageMediaMemory(node);
                } else if(node.querySelectorAll){
                    node.querySelectorAll('video,img').forEach(m=>{
                        stopAutoplay(m);
                        manageMediaMemory(m);
                    });
                }
            });
        });
    });
    mediaObserver.observe(document.body,{childList:true,subtree:true});

    // ---------- 7) SPA navigasyonları ve requestAnimationFrame ----------
    function reapplyAll(){
        applyLazyLoad();
        manageBackgroundMedia();
        virtualizeMessages();
        document.querySelectorAll('video,img[src$=".gif"]').forEach(manageMediaMemory);
    }

    document.addEventListener('DOMContentLoaded', reapplyAll);
    window.addEventListener('yt-navigate-finish', reapplyAll);
    window.addEventListener('popstate', reapplyAll);

    function frameLoop(){
        virtualizeMessages();
        document.querySelectorAll('video,img[src$=".gif"]').forEach(manageMediaMemory);
        requestAnimationFrame(frameLoop);
    }
    requestAnimationFrame(frameLoop);

})();