性能问题:由于d3可视化,HTML文件大小太大且渲染缓慢

时间:2019-02-11 21:49:02

标签: javascript html d3.js svg r-markdown

我正在研究一个结合了D3.js和ggplot2的报告,以可视化世界各国的时间序列数据。我是第一次使用D3。在报告中,ggplot2用于国家/地区级别分析,D3图表用于指标级别。更具体地说,每个指标只有一个D3图表;而在每个指标下,每个国家/地区的一个指标下可能有200 ggplot可视化。

我运行了5个指标的报告,我得到了一个50 MB的html文件,从字面上看,要在Google chrome中打开它最多需要30秒。然后,我删除所有D3(示例报告中有5个D3散点图),html文件大小减小到了约41 MB。我知道删除D3之后,html仍然很大。但是我不知道为什么5 D3即占用10 MB? (我将每个SVG画布的大小调整为width&height = 400)是否可能是因为DOM包含了所有数据(只是猜测,这是此区域的新内容)?是否有任何解决方案来减小D3图表的大小以使html更浅?

然后我想我的第二个问题是为什么仅ggplot的html仍然那么大?我正在使用R markdown生成报告。并且根据指标,数据的总行数(所有国家/地区,一个指标)可能约为20,000。

我正在寻找减少html大小或滚动渲染的更好方法。现在,如果我运行20个指标的报告,它将卡住(永远不会在Chrome中完成渲染)

非常感谢!任何建议表示赞赏!

1 个答案:

答案 0 :(得分:0)

找到了解决我的问题的帖子:https://www.zevross.com/blog/2017/06/19/tips-and-tricks-for-working-with-images-and-figures-in-r-markdown-documents/

我的主要收获是“ R Markdown报告中包含大量图形和地图,它们会生成未针对Web查看进行优化的大型HTML文件。”由于无花果分辨率的默认设置为高。为了解决我的问题,我加入了fig.retina = 1(默认设置为2,将分辨率乘以2以适合视网膜屏幕)以及dpi = 72,这可以将输出html的大小显着减小一半。

所以我在r可视化块中的完整设置:

```{r eval=TRUE, echo=FALSE, message=FALSE, warning=FALSE, results='asis', 
      out.width = '500px', dpi= 72, fig.retina=1}
```

希望会有所帮助!