【发布时间】:2014-07-24 08:19:09
【问题描述】:
我刚刚开始使用(新的)Google Charts api,它非常酷。我正在使用此 api 成功创建图表。
但是,我遇到了吞吐量挑战。在我的应用程序中,我根据从 NOAA 获取的实时数据生成了三个图表。获取数据、将其处理成图表形式然后在客户端绘制图表所花费的时间是一种令人无法忍受的缓慢用户体验。
所以我的想法是在(托管)服务器上定期(每 15-30 分钟)生成图表,然后只向访问者提供最近的图像。
我查看了 phantomjs(按照 this post 中的建议),但它看起来像是使用了一个 .exe 文件,我无法将它上传到我的共享主机。
还有 this thread 用于专有解决方案(Highcharts),但我想先探索开源替代方案,然后再走 Highcharts 路径。
其他解决方案侧重于允许用户将呈现的图表另存为图像,但我的目标是永远不要在浏览器中呈现图表或让任何服务器加载,除了在页面请求时包含图像。
我还没有看到任何处理动态生成的图表的东西,这些图表“自动”转换为在页面呈现时“自动”提供的图像。
总之,这是我试图拼凑的三个部分:
1) 从第三方(在这种情况下为 NOAA)提取数据并将数据呈现为 Google 图表(完成,这里没有问题) 2)自动将每个渲染图表转换为图像,服务器端并创建图像url 3)在渲染前将图表的图片URL(会经常刷新)粘贴到网页的html中(通过php)
附:可以为每个图表图像设置一个静态 url...我没有创建图像存档...
有什么建议吗?我错过了什么吗?
【问题讨论】:
-
我会使用缓存。每次页面加载时,检查是否有缓存或者缓存的版本是否太旧;如果是这样,生成一个新的。这是共享的唯一选项。但是您是否对实际如何将此图表转换为图像更感兴趣?如果是这样,图表是什么格式? SVG?
-
我没有使用缓存,所以请原谅我的幼稚问题。你在考虑服务器端吗?所以第一个请求页面的用户仍然会受到性能影响,但后续用户(理论上)不会?至于您评论的第二部分,Google Chart api 本身会创建一个 SVG 图表。我希望呈现给用户的页面包含与用户页面请求异步创建的图像。
-
可视化 API 完全是客户端的,因此您必须在浏览器中渲染图表,然后将图像数据发送到服务器进行保存。但是,大多数图表的渲染速度都很快,因此我会尝试将您的数据查询缓存到 NOAA,并将数据发送到客户端以呈现图表,然后再研究静态图像解决方案。
-
@asgallant - 感谢您的建议!您的评论促使我调查每个过程的相对经过时间。事实上,从 NOAA 下载和按摩数据大约需要 3100 毫秒,而实际下载谷歌图表 js 和渲染图表大约需要 400 毫秒!所以我将把注意力转向数据采集与转换!如果您将您的评论作为答案写出来,我会接受!
-
更新:我已经实施了 asgallant 的建议,并将页面加载时间从 6 秒以上缩短到 3 秒左右。如果我可以消除图表的实时渲染,下一个 50% 的改进(将页面加载时间减少到 1.5 秒)将会到来......
标签: javascript php image charts google-visualization