You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chromium内核浏览器大尺寸HTML Canvas内存泄漏问题求助

Chromium内核浏览器(Chrome/Edge)大尺寸Canvas GPU内存泄漏问题求助

我在高DPI显示器上用以下标准代码缩放Canvas以实现清晰显示:

var dpiScale = ...;  // 例如 2, 2.25, 3
var width = 1500, height = 800;
canvas.width = width * dpiScale;
canvas.style.width = width + "px";
canvas.height = height * dpiScale;
canvas.style.height = height + "px";
canvas.getContext("2d").scale(dpiScale, dpiScale);

当Canvas频繁更新(每秒数次,滚动、捏合缩放等交互时更频繁),GPU进程会大量分配内存且从不释放,很快就会崩溃。

该问题具有以下特征:

  • 仅出现于Chrome和Edge,Safari、Firefox无此问题
  • 似乎是近期出现或显著恶化的问题
  • 与缩放后的Canvas尺寸相关,超过阈值才会触发;移除缩放(dpiScale=1)或缩小Canvas尺寸可解决
  • 与特定Canvas绘图API无关,仅使用moveTo()、lineTo()、stroke()、fill()等基础API仍会出现,未使用getImageData()

目前找到两个可行的临时解决办法:

  • 限制Canvas更新频率,比如改为20fps,而非使用requestAnimationFrame()
  • 使用getContext("2d", {willReadFrequently: true}),该参数会关闭硬件加速,且未带来明显CPU开销,此时GPU进程内存会在更新停止后释放

无法完全排除是显卡驱动或Chromium与驱动交互的问题,并非所有电脑都能复现。

现寻求:

  • 更多相关见解
  • 比{willReadFrequently: true}更优的解决方案
  • 可能被忽略的、导致泄漏的特定Canvas操作

内容的提问来源于stack exchange,提问作者user13473954

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:20:18