javascript - 多个 Canvas 层内存泄漏

标签 javascript memory canvas layer

我正在尝试将多个 Canvas 层添加到 DOM 中,并且发现虽然添加许多层不是问题,但如果我使用 .fillText 将内容添加到层中,我突然会使用大量内存,通常是火狐崩溃并导致整个机器瘫痪。如果有人发现我正在以错误的方式做某事,我将不胜感激您提供的任何建议 - 谢谢!

下面的代码 - 这是实际情况的简化版本,但演示了问题 - 如果我增加循环运行的次数,我很快就会遇到问题。但是,如果我注释掉 .fillText 代码,我似乎可以添加许多层,但是一旦我尝试 .fillText 它们,我的内存使用就会飞速增长......

  <!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    <title>.</title>
</head>

<body>
    <div id="canvasCont"></div>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

    <script>

    $(function () {
    var id = 1;
    var top = 100;

    for ( i = 0; i < 5; i++ ) {
        var left = 100;

        for ( a = 0; a < 5; a++ ) {

            $('#canvasCont').append(
                "<canvas width='1300px' height='1300px' style='position: absolute; border: 1px solid black;' id='canvas_" + id + "'>" +
                    "Your browser does not support canvas" +
                "</canvas>"
            );

            var context = document.getElementById( 'canvas_' + id ).getContext( '2d' );

            context.font = "10px Verdana";
            context.fillStyle = "red";
            context.fillText(
                id,
                left,
                top
            );

            left += 55;
            id++;
        }

        top = top + 55;
    }

}
});
</script>
</body>
</html>

最佳答案

FillText 使用大量内存来显示,因为它是基于矢量的绘图。 (如果您打算始终显示相同的文本,我建议使用图像)

我还要补充一点,您正在创建具有相当高分辨率的多个 Canvas ,这对您的机器来说可能很困难。

关于javascript - 多个 Canvas 层内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468454/

相关文章:

c - 使用 malloc 分配的空间传递指针

Android:如何获得更快的 onDraw()

javascript - ResponsiveSlides 不显示寻呼机

c - 在 C 中分配大内存块时避免分页?

c# - 使用来自 C# byteArray 的 javascript 显示图像

java - Java中如何获取Instrumentation实例

html - 是否可以使用 html5 和 Canvas 剪辑/屏蔽 div?

html - 悬停时 map 颜色变化?

javascript - onclick 网站中任意位置的 javascript,在新选项卡中打开另一个网站

javascript - 如何在javascript中内联css