// ==UserScript== // @name YouTube Live Cpu Tamer // @name:ja YouTube Live Cpu Tamer // @name:zh-CN YouTube Live Cpu Tamer // @description It reduces the high CPU usage on Super Chats with nothing to lose. // @description:ja スーパーチャットによる高いCPU使用率を削減します。見た目は何も変わりません。 // @description:zh-CN 降低超级聊天的高CPU利用率。外观完全没有变化。 // @namespace knoa.jp // @include https://www.youtube.com/live_chat* // @include https://www.youtube.com/live_chat_replay* // @version 1 // @grant none // @downloadURL none // ==/UserScript== (function(){ const THROTTLE = 1000; let items = document.querySelector('yt-live-chat-ticker-renderer #items'); let site = { get: { container: (node) => node.querySelector('#container'), }, }; let core = { initialize: function(){ if(items === null) return setTimeout(core.initialize, 1000); observe(items, function(records){ records.forEach(r => r.addedNodes.forEach(node => { let container = site.get.container(node); container.parentNode.style.background = container.style.background; let lastUpdated = Date.now(); observe(container, function(records){ let now = Date.now(); if(now - lastUpdated < THROTTLE) return; lastUpdated = now; container.parentNode.style.background = container.style.background; }, {attributes: true, attributeOldValue: true, attributeFilter: ['style']}); })); }); core.addStyle(); }, addStyle: function(name = 'style'){ if(core.html[name] === undefined) return; let style = createElement(core.html[name]()); document.head.appendChild(style); }, html: { style: () => ` `, }, }; const createElement = function(html = ''){ let outer = document.createElement('div'); outer.innerHTML = html; return outer.firstElementChild; }; const observe = function(element, callback, options = {childList: true, attributes: false, characterData: false, subtree: false}){ let observer = new MutationObserver(callback.bind(element)); observer.observe(element, options); return observer; }; core.initialize(); })();