Thanks to visit codestin.com
Credit goes to github.com

Skip to content

弹幕库使用过程中如果弹幕数量过多会导致内存溢出 #951

@thshu

Description

@thshu

我用弹幕库的时候总是出现内存一直增长,直到网页崩溃,目前我弹幕加载方案是先请求接口拿到所有的弹幕数据,然后监听timeupdate事件去调用弹幕库的load方法追加弹幕,目前测试如果弹幕关掉不显示(timeupdate时间内一样进行弹幕追加)就不会出现内存一直增长的情况

相关代码:

let lastSkipIndex = -1;
let lastDanmuLoadedUntil = -1;
let danmuConfig = {
	loadedUntil: 0,
	segmentDuration: 10
}
art.on("video:timeupdate", () => {
    const currentTime = art.currentTime;

    // 弹幕分段加载
    let episode_number = "43";
	debugger
    if (episode_number in allDanmaku) {
      let danmuList = allDanmaku[episode_number];
      let current = art.currentTime;
      if (current >= danmuConfig.loadedUntil) {
        // 避免重复加载同一段
        if (danmuConfig.loadedUntil === lastDanmuLoadedUntil) return;
        lastDanmuLoadedUntil = danmuConfig.loadedUntil;

        if (
          danmuConfig.loadedUntil === 0 ||
          (current - danmuConfig.loadedUntil) > (danmuConfig.segmentDuration * 2)
        ) {
          danmuConfig.loadedUntil = current - 5;
        }
        const startTime = danmuConfig.loadedUntil;
        const endTime = startTime + danmuConfig.segmentDuration;
        const startIndex = sortedIndexBy(danmuList, { time: danmuConfig.loadedUntil }, o => o.time);
        const segment = danmuList.slice(startIndex).filter(d => d.time < endTime);
        if (segment.length) {
          art.plugins.artplayerPluginDanmuku.load(segment); // 追加弹幕
        }
        danmuConfig.loadedUntil = endTime;
      }
    }
  });




  function sortedIndexBy(array, value, iteratee) {
  if (typeof iteratee !== 'function') {
    throw new TypeError('iteratee must be a function');
  }

  var val = iteratee(value);
  var low = 0;
  var high = array.length;

  while (low < high) {
    var mid = (low + high) >>> 1;
    // compute ranking for the midpoint element
    var midVal = iteratee(array[mid]);
    if (midVal < val) {
      low = mid + 1;
    } else {
      high = mid;
    }
  }

  return low;
}

Environment

  • Browser: Google Chrome
  • Version:136.0.7103.93(正式版本) (64 位)
  • Operating System: Windows 11 专业版
  • Version: 24H2
  • artplayer:5.2.3
  • artplayer-plugin-danmuku:5.1.6

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions