我正在设计一个向 Web 客户端以及移动客户端(第 2 阶段)提供数据/信息的服务器。数据将填充图表;成像绘制 5 年内每天的股票价格(显示最小值/最大值/平均值)。
1] 如果我向客户端发送 3000 个数据点,则需要发送大量数据,然后进行绘图。相反,如果我在服务器上构建图形,我可以向客户端发送 PNG。哪个更好?
2] 在 5 年内绘制每个点是一种不好的做法吗?MySQL有没有办法一次平均5个数据点(天)并返回它?
仍处于设计阶段,但我意识到这个决定会真正影响应用程序的性能。
我正在设计一个向 Web 客户端以及移动客户端(第 2 阶段)提供数据/信息的服务器。数据将填充图表;成像绘制 5 年内每天的股票价格(显示最小值/最大值/平均值)。
1] 如果我向客户端发送 3000 个数据点,则需要发送大量数据,然后进行绘图。相反,如果我在服务器上构建图形,我可以向客户端发送 PNG。哪个更好?
2] 在 5 年内绘制每个点是一种不好的做法吗?MySQL有没有办法一次平均5个数据点(天)并返回它?
仍处于设计阶段,但我意识到这个决定会真正影响应用程序的性能。
你能估计一下你将要发送的数据量吗?3000 个数据点可以是 12K(每个 4 字节float
)和 100K(时间戳 + 文本格式的值)之间的任何值。虽然 12K 不算什么,但 100K 很重要,尤其是对于移动设备。
处理时间也很重要。与在画布上生成图表相比,使用一些较低级别的语言在服务器上生成数据并返回 PNG 会更加高效。
但是您应该考虑图表的分辨率。如果要绘制 3000 个点,则水平方向至少需要 3000 个像素。如今最大的屏幕达到2560 像素宽度,这意味着您将永远无法显示所有数据,您将不得不隐藏一些点。手机上就差很多了。争取 200-300 像素宽度和至少两倍的数据点。
话虽如此,我建议采用以下方法:
计算平均值并向浏览器返回不超过 100-200 个数据点(平均值必须是智能的,这样您就不会失去一些有趣的极端情况)。
在浏览器上使用数十个 JavaScript 图表库之一
一旦您需要更详细的信息,用户可以放大图表,这将要求服务器提供更高分辨率的数据。