A)我正在为我的一个金融项目使用Highstock图表库。但是,我陷入了性能问题。我对 Highstock 的工作实现有i)图表中的 5 个图表ii)图表中的多条线(和线型) iii)应用于图表上的点的标签iv)新数据大约每秒到达一次,添加一个点并制作动画图向左。但是,我在使用此设置时遇到了一些关键问题:
- 渲染非常慢。由于绘制的图表数量(和次数),这是一个性能问题
- 无法调整底部的时间范围控制。由于控件冻结导致的性能问题
- 我可以添加一个点,使图形向左移动。但是,我无法使用该新数据点添加标志。请参阅此SO 问题。
B)我已经检查了这些其他 SO 问题( Highstock 性能问题,Highcharts 性能增强方法?),并尝试了他们的解决方案,但改进非常有限:
:turboThreshold 50 ;; tick-list length will be a max of 100
:shadow false
:marker {:enabled false}
:plotOptions{:series {:enableMouseTracking false}}
C)我没有看到这些 Highstock 问题的简单解决方案。这是一个很棒的图书馆。但我正在查看Google Charts API,看看它是否能满足这些要求。
- 鉴于以下所有交互,Google Charts API 的性能超过了 Highstock...
- 一页上有多个图表
- 1 个视图中的多个重叠图表
- 图表:线、面积(范围)、直方图、阈值线(见上面的红线和绿线)
- 轻松将标志添加到我的时间序列上的某个点
- 轻松向我的时间序列折线图添加一个点
- 轻松地将点和标志(同时)添加到我的时间序列折线图中
D)有没有人经历过类似的事情?还有其他方法可以提高我的 highstock 性能吗?谷歌图表可以在这里做得更好吗?
谢谢
附言。我的 highcharts 调用看起来像这样(Clojurescript 代码):
(defn chart-fill [selector dataList signal-map strategy-map label]
(-> ($ selector)
(.highcharts "StockChart" (clj->js
{:names [label "Bolling Band" "Simple Moving Average" "Exponential Moving Average"]
:rangeSelector {:selected 11}
:title {:text label}
:chart {:zoomType "x"}
:navigator {:adaptToUpdatedData true}
:yAxis [{
:title {:text "Technical Analysis"}
:height 200
:shadow false
:turboThreshold 50
:marker {:enabled false}}
{
:title {:text "MACD / Signal"}
:height 100
:top 300
:offset 0
:lineWidth 2
:turboThreshold 50
:shadow false
:marker {:enabled false}
:plotOptions{:series {:enableMouseTracking false}}}
{
:title {:text "MACD Histog"}
:height 100
:top 400
:offset 0
:lineWidth 2
:turboThreshold 50
:shadow false
:marker {:enabled false}
:plotOptions{:series {:enableMouseTracking false}}}
{
:title {:text "Stochastic Osc"}
:height 100
:top 500
:offset 0
:lineWidth 2
:max 1
:min 0
:turboThreshold 50
:shadow false
:marker {:enabled false}
:plotOptions{:series {:enableMouseTracking false}}
:plotLines [{
:value 0.75
:color "red"
:width 1
:dashStyle "longdash"
:label {:text "Overbought"}}
{
:value 0.25
:color "green"
:width 1
:dashStyle "longdash"
:label {:text "Oversold"}}]}
{
:title {:text "OBV"}
:height 100
:top 600
:offset 0
:lineWidth 2
:turboThreshold 50
:shadow false
:marker {:enabled false}
:plotOptions{:series {:enableMouseTracking false}}}]
:series (build-graph-series-data dataList signal-map strategy-map)}))))