javascript - 浏览器调整大小时如何优化d3js响应条形图中的cpu消耗
问题描述
我写了一些代码来做响应式条形图,但是当我调整浏览器大小时 cpu 消耗会变高。我如何优化代码以降低 CPU 的难度?
我删除了一些浮点变量
window.onload = window.onresize = function()
{
ancho = d3.select(svg).node()._groups[0][0].clientWidth;
largo = d3.select(svg).node()._groups[0][0].clientHeight;
if((rango[0]*multiplicador) > largo)
{
multiplicador = multiplicador/2;
console.log(multiplicador+' > '+largo);
}
else
{
if((rango[0]*multiplicador) < largo-50)
{
multiplicador = multiplicador+multiplicador/2;
console.log(multiplicador+' > '+largo);
}
}
svg.selectAll('rect').remove();
svg.selectAll('rect')
.data(datos)
.enter()
.append('rect')
.attr('fill','blue')
.attr('stroke','red')
.attr('x', function(data, index){return ((ancho/(datos.length))*index) + espaciado;})
.attr('y', function(data, index){return (largo)-(data*multiplicador);})
.attr('width', function(data, index){return (ancho/datos.length)-espaciado;})
.attr('height', function(data, index){return data*multiplicador;});
}
它可以正常工作
解决方案
感谢 Yaelet,阅读这篇文章我发现了如何在调整浏览器大小时最小化 CPU 消耗:
1. 节流: 图表不会在每次浏览器调整大小事件时调整大小,超时我可以设置我想跳过的毫秒数。
window.addEventListener('resize', function() {
// only run if we're not throttled
if (!throttled) {
// actual callback action
getDimensions();
// we're throttled!
throttled = true;
// set a timeout to un-throttle
setTimeout(function() {
throttled = false;
}, delay);
}
});
2. 去抖动: 图表仅在窗口大小调整完成时才调整大小。
window.addEventListener('resize', function() {
// clear the timeout
clearTimeout(timeout);
// start timing for event "completion"
timeout = setTimeout(getDimensions, delay);
});
最后,我希望阅读一些其他技巧,以在调整窗口大小时减少对 cpu 的影响。
推荐阅读
- azure-service-fabric - 如何在所有 Service Fabric 节点中调用方法?
- postgresql - 如何从 .bat 文件在 heroku 上的远程 postgres 数据库上运行代码
- r - 代码优化——data.table,当前for循环多引用优化成data.table
- ionic-framework - 离子:如何修复 UnhandledPromiseRejectionWarning?
- mule - Mule 4 中的批处理
- jquery - jQuery - 如果 div 重叠调整 css 顶部值
- python - 在python中的指定html块之间提取文本
- testng - KotlinTest 是否也支持 TestNG?
- sequence - odoo 10 中的测序
- angular - 如何删除下划线并在有角材料组件周围提供一个框?