• 提高HTML5 Canvas性能的技巧


    详细内容请点击

    一:使用缓存技术实现预绘制,减少重复绘制Canvs内容

    很多时候我们在Canvas上绘制与更新,总是会保留一些不变的内容,对于这些内容

    应该预先绘制缓存,而不是每次刷新。

    直接绘制代码如下:

    context.font="24px Arial";
    context.fillStyle="blue";
    context.fillText("Please press to exit game",5,50);
    requestAnimationFrame(render);

    使用缓存预绘制技术:

    function render(context) {
    context.drawImage(mText_canvas, 0, 0);
    requestAnimationFrame(render);
    }

    function drawText(context) {
    mText_canvas = document.createElement("canvas");
    mText_canvas.width = 450;
    mText_canvas.height = 54;
    var m_context = mText_canvas.getContext("2d");
    m_context.font="24px Arial";
    m_context.fillStyle="blue";
    m_context.fillText("Please press to exit game",5,50);
    }

    使用Canvas缓存绘制技术的时候,一定记得缓存Canvas对象大小要小于实际的Canvas

    大小。尽量把绘制直线点的操作放在一起,而且尽量一次绘制完成,一个不好的代码如下:

    for (var i = 0; i < points.length - 1; i++) {
    var p1 = points[i];
    var p2 = points[i+1];
    context.beginPath();
    context.moveTo(p1.x, p1.y);
    context.lineTo(p2.x, p2.y);
    context.stroke();
    }

    修改以后性能较高的代码如下:

    context.beginPath();
    for (var i = 0; i < points.length - 1; i++) {
    var p1 = points[i];
    var p2 = points[i+1];
    context.moveTo(p1.x, p1.y);
    context.lineTo(p2.x, p2.y);
    }
    context.stroke();

    避免不必要的Canvas绘制状态频繁切换,一个频繁切换绘制style的例子如下

    var GAP = 10;
    for(var i=0; i<10; i++) {
    context.fillStyle = (i % 2 ? "blue" : "red");
    context.fillRect(0, i * GAP, 400, GAP);
    }

    避免频繁切换绘制状态,性能更好的绘制代码如下:

    // even
    context.fillStyle = "red";
    for (var i = 0; i < 5; i++) {
    context.fillRect(0, (i*2) * GAP, 400, GAP);
    }

    // odd
    context.fillStyle = "blue";
    for (var i = 0; i < 5; i++) {
    context.fillRect(0, (i*2+1) * GAP, 400, GAP);
    }

    绘制时,只绘制需要更新的区域,任何时候都要避免不必要的重复绘制与额外开销。

    对于复杂的场景绘制使用分层绘制技术,分为前景与背景分别绘制。定义Canvas层的

    HTML如下:

     

    清空Canvas上的绘制内容:

    context.clearRect(0, 0, canvas.width,canvas.height)

    但是其实在Canvas还有一种类似hack的清空方法:

    canvas.width = canvas.width;

    也可以实现清空canvas上内容的效果,但是在某些浏览器上可能不支持。

    <blockquote></blockquote>

    学习来源:http://blog.csdn.net/jia20003/article/details/9225501

    查看更多html5内容请点击

  • 相关阅读:
    关于form表单的相同name问题
    MySQL数据库视图
    Blazor
    查看Oracle正在执行的任务
    比较不错的几款开源的WPF Charts报表控件
    Raft算法
    EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
    systemd、upstart和system V 枯木
    MRTG生成首页报错解决方法 枯木
    dd备份和恢复 枯木
  • 原文地址:https://www.cnblogs.com/j--d/p/html5-canvas.html
Copyright © 2020-2023  润新知