pyecharts 生成图表太慢原因分析
我有一个批量生成 Word 报告的脚本,其中用到了 pyecharts 来绘制各种图表,pyecharts 底层用 ChromeDriver 去获取 Echarts 生成的图片,但是非常不稳定,经常失败。
经调试,发现 pyecharts 会生成一个中间文件 render.html,render.html 负责调用 Echarts 渲染图表,但是 render.html 在引用 Echarts 时是从 https://assets.pyecharts.org/assets/ 加载的:
<script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script>
这个域名经常访问超时,所以导致了绘制图表失败。
这域名定义在 pyecharts/globals.py 中:
class _OnlineHost: DEFAULT_HOST = "https://assets.pyecharts.org/assets/" ... OnlineHostType = _OnlineHost() ... class _CurrentConfig: ... ONLINE_HOST = OnlineHostType.DEFAULT_HOST ... CurrentConfig = _CurrentConfig()
最终所有配置都保存到了 CurrentConfig 对象中,我又在 render/engine.py 里看到导入了 CurrentConfig:
from ..globals import CurrentConfig, NotebookType
正好在绘制图表时也用了 pyecharts.render 里的 make_snapshot 函数,因此为了加速渲染,我把 echarts.min.js 下回来放到了本地的 Web 服务器中,并在脚本中强行修改 ONLINE_HOST:
import pyecharts.render from pyecharts.render import make_snapshot pyecharts.render.engine.CurrentConfig.ONLINE_HOST = "http://host:8080/"
这下就不会生成失败了。