Discord web için tüm ağır DOM, animasyon ve eventleri optimize ederek CPU ve RAM kullanımını minimize eder
当前为
// ==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);
})();