Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

现在的脚本版本打开数个图片页面会爆内存\("▔□▔)/

About: Pixiv Plus

使用脚本打开数个图片页面会使内存占用激增
我电脑16G内存,打开约10个图片页面就快占用完了,继续增加页面数就会因为内存爆满而卡死浏览器
如果关闭脚本则没有问题,打开30+个页面也占用不了多少内存
印象中2019年后才出现这个问题(大概吧),以前使用该脚本好像没碰到这个问题
PS.浏览器为最新Firefox65.01,win10,使用Tampermonkey,另外无论开不开极速模式都一样

Comments

  • 我利用历史版本自查了一下,从0.4.7版之后出现问题,0.4.6版是没有这个问题的

  • edited February 17 [?]

    出现原因的问题大概是因为默认开启预下载的问题,目前正在设置页面开发一个控制面板, 用于接管一些脚本功能的开关. 预下载功能开关的改动挺大的, 目前最好不要一次性开启太多页面.

    极速模式只是开关MutationObserver而已

  • 0.5.5版还是没有解决这个问题……在设置页面的控制里无论怎么开关那几个选项都没用

  • edited March 3 [?]

    我去比较一下新旧版本…

  • 我比较了0.4.6和新版本的区别,发现问题出在下面的一段代码里(反混淆处)

    下面是0.4.6版的:

    let classLib = {
        userIcon: ['_2lyPnMP'],
        rightColumn: ['_2e0p8Qb']
    };
    setInterval(function () {
        let webpackJsonp = unsafeWindow.webpackJsonp;
        // 1. 格式化 webpackJsonp 变量, 取出反混淆所需的变量
        let filter = webpackJsonp.map(value => value[1]).filter(value => value && !Array.isArray(value) && typeof value === 'object');
        $.each(filter, (index, obj) => {
            for (let key in obj) {
                if (!obj.hasOwnProperty(key)) {
                    continue;
                }
                let tmp = {};
                // 2. 尝试导出反混淆变量到tmp
                try { obj[key](tmp); } catch(err) { continue; }
                // 3. 存在一个变量对应多个反混淆值的情况, 用数组存入
                if(tmp.hasOwnProperty('exports')) {
                    $.each(tmp.exports, function (k, v) {
                        classLib[k] = classLib[k] || [];
                        try { classLib[k].push(v); } catch(err) { return; }
                        classLib[k] = unique(classLib[k]); // 去重
                    });
                }
            }
        });
    }, 1000);
    

    下面是0.5.5版的:

    let defaultClassLib = {
        userIcon: 'sc-iwsKbI',
        rightColumn: '_3czssV0',
        coverTexture: '_3HZmrVs',
        alertContainer: "_3Dfo7Ik",
    };
    let classLib = defaultClassLib;
    GM.getValue(GMkeys.classLib).then(value => { classLib = $.extend(JSON.parse(value || '{}'), defaultClassLib); });
    setInterval(function () {
        let webpackJsonp = unsafeWindow.webpackJsonp;
        // 1. 格式化 webpackJsonp 变量, 取出反混淆所需的变量
        let filter = webpackJsonp.map(value => value[1]).filter(value => value && !Array.isArray(value) && typeof value === 'object');
        $.each(filter, (index, obj) => {
            for (let key in obj) {
                if (!obj.hasOwnProperty(key)) {
                    continue;
                }
                let tmp = {};
                // 2. 尝试导出反混淆变量到tmp
                try {
                    obj[key](tmp);
                } catch (err) {
                    continue;
                }
                // 3. 存在一个变量对应多个反混淆值的情况, 用数组存入
                if (tmp.hasOwnProperty('exports')) {
                    $.each(tmp.exports, function (k, v) {
                        try {
                            classLib[k] = v;
                        } catch (err) {
                        }
                    });
                }
            }
        });
        GM.setValue(GMkeys.classLib, JSON.stringify(classLib));
    }, 1000);
    

    将0.5.5版的这一段改成0.4.6那样就不会有爆内存的问题了,所以应该是这一段代码的问题。

  • 确实可能是这个原因。我做了反混淆的缓存。classLib是挺大的。
    如今P站反混淆策略升级,旧的反混淆策略失效,现在已经把旧的反混淆的代码删掉了。
    请更新到0.5.6+试试。

  • 0.5.6不会爆内存了

Sign In or Register to comment.