您需要先安装一个扩展,例如 篡改猴、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或关注我们的公众号极客氢云获取最新地址