用 Canvas 绘制飞线

用 Canvas 绘制飞线,第1张

2016-05-12

上一周完成了地图与飞线的实现,使用的是 d3.js + svg,后发现可能存在性能隐患。

当飞线数量多的时候,页面上则有多个 svg <path> 结点,并且每条飞线有头部、结束圆圈、蒙板等效果,则页面上的结点数是 飞线数*其他部件数。将会是一个较大的值。

画布罩在整个 HTML 上,共两层 Canvas 画布,底层绘制世界地图,表层绘制飞线。

二次贝塞尔曲线公式

(其中 起始点 p0, 控制点 p1, 终点 p2)

t 从 0 变到 1,每个 t 的变化时,就绘制一帧;

飞线的速度就取决于增量变化的大小,增量越小,动画就越细致。

如何表现 t ?

给每一个飞线对象单独一个 t 属性,每绘制完一帧,t = t + 增量(固定值);

requestAnimationFrame 动画

与 SVG 飞线 相比:

渐变消失: ctx.globalAlpha

使用 globalAlpha 和 临时 Canvas;

但有两个弊端:

模拟数据来源于B2B 外贸单日询盘量,总数共 596 条, 单次同时绘制 50 条 飞线情况下:

具体如下:

动画帧数保持在 42-60 左右,动画流畅;

动画帧数保持在 12-43 左右,视觉上仔细看略有卡顿;

CPU 占用率在 20%-30% 浮动

CPU 占用率高于 100%

皆无内存泄漏问题。 SVG 飞线的 JS heap 总大小略高于 Canvas 飞线。

测试了 Canvas 飞线,在同时绘 50 条、100 条、200 条、300 条、400 条 时的动画流畅度。

主板跳线的连接方式:1、把所有排线理在一起,根据上面的标注,先来明确每根线的定义:a、电源开关:POWERSW,可能用名:POWER、POWERSWITCH、ON/OFF、POWERSETUP、PWR等,功能定义:机箱前面的复位按钮。b、复位/重启开关:RESETSW,可能用名:RESET、ResetSwicth、ResetSetup、RST等,功能定义:机箱前面的开机按钮。c、电源指示灯:+/-可能用名:POWERLED、PLED、PWRLED、SYSLED等d、硬盘状态指示灯:HDD LED,可能用名:HD LEDe、内置小喇叭:SPEAKER,可能用名:SPK,功能定义:主板工作异常报警器。f、音频连接线:AUDIO,可能用名:FPAUDIO,功能定义:机箱前置音频,一般都是一个整体。g、USB连接前置接口的,一般都是一个整体。2、在主板上找到各针脚的位置。3、全部连接线插完后,检查所有硬件安装是否正确并已经坚固。同时检查所有连接线是否正确并已经坚固。4、检查完成后,在机箱上按开机按钮,检查所有指示灯显示是否正常。5、指示灯检查正常后,用U盘和耳机等,检查前置USB及前置音频是否正常。6、检查一切正常后盖上机箱。排线连接工作完成。提示:所有 *** 作请在电源断电后进行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7542138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存