首页
/ Pakku.js 2025.2.1版本发布:用户脚本异步回调功能详解

Pakku.js 2025.2.1版本发布:用户脚本异步回调功能详解

2025-06-20 01:13:23作者:幸俭卉

项目简介

Pakku.js是一个专注于B站弹幕处理的JavaScript库,它能够对B站视频的弹幕进行智能合并、过滤和优化处理。作为一个开源项目,Pakku.js通过WebAssembly技术实现了高效的弹幕处理能力,同时提供了灵活的用户脚本系统,让开发者可以自定义弹幕处理逻辑。

2025.2.1版本核心更新

本次2025.2.1版本的主要改进集中在用户脚本系统上,引入了异步回调功能,这为弹幕处理带来了全新的可能性。

异步回调的革命性意义

在之前的版本中,Pakku.js的用户脚本回调函数都是同步执行的,这意味着如果一个回调函数的处理逻辑依赖于另一个回调函数的结果,开发者必须通过全局变量等方式来共享数据,代码结构会变得复杂且难以维护。

2025.2.1版本通过支持异步回调函数,彻底改变了这一局面。现在,开发者可以在回调函数中使用async/await语法,优雅地处理回调之间的依赖关系。

异步回调的实际应用

让我们通过一个实际案例来理解这一功能的强大之处。假设我们需要删除所有投票弹幕及其结果,传统方式可能需要复杂的全局状态管理。而使用异步回调,我们可以这样实现:

let votes_resolve = null;
let votes_promise = new Promise(resolve => votes_resolve = resolve);

tweak_proto_view(view => {
    let votes_res = view.commandDms.filter(d => d.command === '#VOTE#').map(d => {
        let extra = JSON.parse(d.extra);
        return {
            time_begin_ms: d.stime,
            time_end_ms: d.stime + extra.duration + 2000,
            option_texts: extra.options.map(o => o.desc),
        };
    });
    votes_resolve(votes_res);
    view.commandDms = view.commandDms.filter(d => d.command !== '#VOTE#');
});

tweak_before_pakku(async chunk => {
    let votes = await votes_promise;
    chunk.objs = chunk.objs.filter(d => {
        for(let v of votes) {
            if(
                d.time_ms >= v.time_begin_ms &&
                d.time_ms <= v.time_end_ms &&
                v.option_texts.includes(d.content)
            )
                return false;
        }
        return true;
    });
});

这段代码清晰地展示了如何通过Promise在tweak_proto_view和tweak_before_pakku两个回调之间传递数据,而不需要任何全局状态管理。

环境参数env的引入

另一个重要改进是回调函数现在可以接收env参数,它包含了执行时的环境信息:

  • env.ingress: 当前视频信息
  • env.segidx: 当前弹幕分片的编号
  • env.config: pakku的当前设置

这使得用户脚本能够根据当前视频或分片的不同情况做出更精确的处理决策。

性能优化

除了功能增强外,2025.2.1版本还包含多项性能优化:

  1. 用户脚本执行优化:不再排队执行用户脚本,减少了主线程被播放器阻塞导致的时间开销
  2. 资源管理改进:在用户脚本运行完毕后再销毁Web Worker,避免了潜在的资源竞争问题
  3. 内存优化:WebAssembly程序会提前释放不再需要的弹幕信息,减少了内存占用
  4. 弹幕合并优化:在合并弹幕时避免不必要的复制操作,提升了处理效率

开发者体验提升

对于开发者而言,2025.2.1版本还改进了用户脚本编辑器的类型速查功能,增加了语法高亮支持,使得编写和调试用户脚本更加方便。

总结

Pakku.js 2025.2.1版本通过引入异步回调功能和环境参数,极大地增强了用户脚本系统的灵活性和表达能力。这些改进使得开发者能够编写更复杂、更强大的弹幕处理逻辑,同时保持了代码的清晰和可维护性。配合多项性能优化,Pakku.js继续巩固了其在B站弹幕处理领域的领先地位。

对于已经使用Pakku.js的项目,这些更新都是向前兼容的,现有脚本无需修改即可继续工作。但对于新项目,建议充分利用这些新特性来构建更优雅的弹幕处理解决方案。

登录后查看全文
热门项目推荐