JavaScriptjs css html

一个js绘图库的优化技巧

2022-04-14  本文已影响0人  alue

最近在项目中使用Cytoscape.js、D3.js和DataV等前端绘图库。

图形常见的操作有拖拽、缩放、平移等。

页面出现这些动作事件后,这些绘图库都会抛出一个hook,然我们有机会根据业务需求,在合适的时机完成图形操作。

问题就来了,例如拖拽事件,用户拖拽一个节点是一个持续的过程,浏览器有可能1s中抛出好几百个“drag”事件。


如果每个“drag”事件,我们都去做绘制图形相关的计算,那么会浪费很多计算资源。

因为浏览器一般1s中最多也就绘制60次,也就是说,尽管我们1秒钟计算了好几百次,只有其中60次的计算结果能够展示在界面上,大部分计算都是无效的,白白浪费了计算资源。

那么有什么优化方法呢?

首先想到的是debounce或者throttle函数, 能够降低回调函数的执行频率。但缺点是,时间参数门限的选取比较纠结,参数大了,用户操作会有卡顿延时感;参数门限小了话,又有可能浪费性能。

最好的办法就是浏览器要绘制界面之前,完成相关的计算,这样不多不少,每个计算结果都能得到展示。

所以,最后的答案来了 —— window.requestAnimationFrame(callback)。这个web API是前端应用绘图库的必备API,能够让用户有丝滑的交互体验,同时让计算开销降到最低。

上一篇 下一篇

猜你喜欢

热点阅读