Greasy Fork is available in English.
H.264 optimize, throttling yumuşatıldı, DOM ve Ambient iyileştirildi, lazy-load yorumlar
当前为
// ==UserScript==
// @name YouTube Performance CPU Optimized v2.3
// @namespace http://tampermonkey.net/
// @version 2.3.0
// @description H.264 optimize, throttling yumuşatıldı, DOM ve Ambient iyileştirildi, lazy-load yorumlar
// @author Sefa AVAN
// @license MIT
// @match http://*.youtube.com/*
// @match http://youtube.com/*
// @match https://*.youtube.com/*
// @match https://youtube.com/*
// @run-at document-start
// ==/UserScript==
(function () {
'use strict';
// ---------- 1) Codec override (AV1 kapalı, VP9 serbest) ----------
const origCanPlayType = HTMLMediaElement.prototype.canPlayType;
HTMLMediaElement.prototype.canPlayType = function (type) {
if (type && /codecs="?av01/i.test(type)) return '';
return origCanPlayType.call(this, type);
};
if (navigator.mediaCapabilities && navigator.mediaCapabilities.decodingInfo) {
const origDecodingInfo = navigator.mediaCapabilities.decodingInfo.bind(navigator.mediaCapabilities);
navigator.mediaCapabilities.decodingInfo = async (cfg) => {
const ct = cfg?.video?.contentType || '';
if (/codecs="?av01/i.test(ct)) return { supported: false, powerEfficient: false, smooth: false };
return origDecodingInfo(cfg);
};
}
// ---------- 2) Event throttling (yumuşatıldı) ----------
function throttleEvents(root = document) {
const throttleMs = 30; // 33Hz, daha akıcı
const last = {};
const types = ['mousemove', 'pointermove', 'scroll', 'resize'];
types.forEach(type => {
root.addEventListener(type, (e) => {
const now = performance.now();
if (last[type] && now - last[type] < throttleMs) {
e.stopImmediatePropagation();
e.stopPropagation();
return;
}
last[type] = now;
}, true);
});
}
// ---------- 3) DOM hafifletme (IntersectionObserver rootMargin küçültüldü) ----------
function slimDOM() {
document.querySelectorAll('ytd-rich-item-renderer,ytd-compact-video-renderer')
.forEach(el => {
if (!el.dataset.cpuOptimized) {
el.dataset.cpuOptimized = '1';
el.style.display = "none";
const observer = new IntersectionObserver((entries, obs) => {
if (entries[0].isIntersecting) {
el.style.display = "";
obs.disconnect();
}
}, { rootMargin: '1000px' }); // daha küçük margin → daha hızlı yükleme
observer.observe(el);
}
});
}
// ---------- 4) Ambient Mode kapatma (observer optimize edildi) ----------
function killAmbient() {
const style = document.createElement('style');
style.textContent = `
.ytp-ambient-light,
.ytp-ambient-mode-enabled,
ytd-watch-flexy[ambient-mode-enabled] .ytp-ambient-light,
ytd-watch-flexy[ambient-mode-enabled] .html5-video-player::before {
display: none !important;
opacity: 0 !important;
visibility: hidden !important;
}
`;
document.documentElement.appendChild(style);
let mo;
const startAmbientObs = () => {
if (mo) return; // birden fazla observer oluşturulmasın
const flexy = document.querySelector('ytd-watch-flexy');
if (flexy) {
mo = new MutationObserver(() => {
flexy.removeAttribute('ambient-mode-enabled');
});
mo.observe(flexy, { attributes: true, attributeFilter: ['ambient-mode-enabled'] });
}
};
document.addEventListener('DOMContentLoaded', startAmbientObs);
window.addEventListener('yt-navigate-finish', startAmbientObs);
}
// ---------- 5) Lazy-load yorumlar ----------
function lazyLoadComments() {
const comments = document.querySelector("ytd-comments#comments");
if (!comments) return;
comments.style.contentVisibility = "hidden";
const obs = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting) {
comments.style.contentVisibility = "visible";
obs.disconnect();
}
});
obs.observe(comments);
}
// ---------- 6) Apply ----------
const reapply = () => {
throttleEvents();
slimDOM();
killAmbient();
lazyLoadComments();
};
document.addEventListener('DOMContentLoaded', reapply);
window.addEventListener('yt-navigate-finish', reapply);
})();