您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Optimizes animation calls for lower GPU/CPU consumption
当前为
// ==UserScript== // @name Youtube Player perf // @version 0.1 // @description Optimizes animation calls for lower GPU/CPU consumption // @namespace nopeless.github.io // @author nopeless // @match https://www.youtube.com/watch?v=* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // @license MIT // ==/UserScript== /* global _yt_player */ (() => { "use strict"; function modifyBase() { console.log("Overriding _yt_player methods"); if (!window._yt_player) return console.error("YT player not avaliable, load order is wrong"); const PV = _yt_player.PV; // save the original prototype const PVPrototype = _yt_player.PV.prototype; let dirty = false; function update(a) { for (var b = _yt_player.u(Object.keys(a)), c = b.next(); !c.done; c = b.next()) { c = c.value; if (this.__updateCache.get(c) !== a[c]) { // console.log("updating", c, a[c]); this.updateValue(c, a[c]); dirty = true; this.__updateCache.set(c, a[c]); } } } _yt_player.PV = function (...args) { PV.call(this, ...args); this.__updateCache = new Map(); // override update this.update = update; }; _yt_player.PV.prototype = Object.create(PVPrototype); _yt_player.PV.prototype.constructor = _yt_player.PV; const Nn = _yt_player.Nn; let counter = 0; // up to 4 _yt_player.Nn = (a, b, c) => { // don't do excessive progress bar updates if (b === "transform") { if (dirty) { counter = 4; // console.log("unmarking dirty"); dirty = false; } if (counter > 0) { // console.log("updating bar"); counter--; } else { return; } } Nn(a, b, c); }; } window.__modifyBase = modifyBase; const ob = new MutationObserver(mrs => { const l = mrs.map(mr => mr.addedNodes[0]).find(node => node && node.nodeName === "SCRIPT" && node.src && node.src.match(/\/base\.js$/)); if (!l) return; l.setAttribute("onload", "__modifyBase()"); ob.disconnect(); }); console.log("watching for script changes"); ob.observe(document, { attributes: false, childList: true, subtree: true }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址