小程序canvas,draw(true) 与 draw()的性能差异
发布于 6 年前 作者 pyan 13436 次浏览 来自 问答

我在使用小程序canvas的过程中,发现了一个奇怪的现象, canvas的draw(true)与draw()有明显的性能差异,在多次调用draw(true)后,就出现了严重的掉帧,而draw()不会,为什么会考虑使用 draw(true)来保留绘制的痕迹呢,是因为我的小程序有这个需求,我需要绘制出一条轨迹以呈现给用户,为什么不考虑使用缓存路径点连线的方式来绘制呢,也是因为可能产生的数据量实在太大,所以我在这里贴上我的绘制代码,请大师 解惑!

OutView.Draw = function (canvas_id, data) {

  context.save();

  context.beginPath();

  context.translate(data.canvasWidth/2,data.canvasHeight/2);

  context.setStrokeStyle(data.PathColor);

  context.setFillStyle(data.PathColor);

  context.setLineWidth(2);

  context.moveTo(LastXYZ.X,0-LastXYZ.Y);

  context.lineTo(data.X,0-data.Y)

  context.arc(data.X, 0-data.Y, 1, 0, 2 * Math.PI)

  context.closePath();

  context.stroke();

  context.restore();

  context.draw(data.RetainContrailState);  //关键在这行,用户可以选择看轨迹或者不看轨迹,性能差异明显

  LastXYZ = {

    X: data.X,

    Y: data.Y,

    Z: data.Z

  }

};

我在小程序中调用这段代码,是通过定时器, 约30毫秒每次

1 回复

实测,draw(true)久了之后会变卡变慢,这时候调用draw()可以恢复速度。但我这边需求不能调用draw(),还请官方尽量解决一下这个问题

回到顶部