如何提高jqPlot parseOptions / jquery.extend性能

我有一个使用jqPlot的应用程序,我想让它更好地执行 - 也就是让它更快地渲染图表。

使用Firefox分析器,我可以深入了解代码各个部分的时间,并且我发现对jqplot的调用需要大约85%的时间。 在这85%中,约60%用于jqplot.draw例程,约20%用于jqplot.parseOptions例程。

除了静态配置数据(图例相关的东西,网格相关的东西,光标和荧光笔的东西,以及x,y,y1和y2轴信息)之外,实际图表数据还会在选项对象中传递给jqplot。 图表数据包括系列数据,系列选项和标签刻度。

jqplot将所有这些东西都复制到它自己的内存中,并使用一个名为parseOptions的函数来执行它,该函数使用jquery.extend()函数来完成这项工作。 jquery.extend函数似乎是一个通用的复制函数,它知道如何处理所有的数据类型和对象,但像任何通用函数一样,它并没有针对其中的任何一个进行优化。

我的第一个尝试是尝试传递给jqplot的静态选项,然后使用jqplot.replot()将系列数据,系列选项和记号传递给图表对象(以避免在parseOptions中扩展)。 这失败了,在我追踪代码后,我发现replot只接受线图数据(x,y点)并且不接受OHLC数据(因为大多数这些图表都是由它们组成的)。 我接下来尝试将最初调用中的OHLC数据传递给jqplot,并在随后的调用中传递序列选项和刻度以重新绘制,但尽管(有限)jqplot文档表示replot将接受选项,但它不是完整的选项集,而且我需要的东西没有处理。

我的下一个尝试是使series_options“更轻”。 图表的主要系列数据使用OHLCRenderer,而其他系列使用lineRenderer。 当前的代码将lineRenderer设置为默认值,并且每个series_option对象都有一个指定OHLCRenderer的覆盖。 在series_option对象中,这些OHLCRenderer重写引用中的每一个都有多个对象 - 函数原型和其他东西。 由于与样品/晶圆对象相比,只有少数非样品/晶圆类型,因此我改变了方法使OHLCRenderer成为默认设置,并将lineRenderer覆盖添加到其他对象。 我认为删除这么多的对象引用会加速parseOption过程,但它没有明显的区别(如果有的话,它似乎有点慢,但因为分析过程当然不清楚)。

在这一点上我没有任何想法。 任何人有什么想法,我可以做什么来加快图表渲染?

链接地址: http://www.djcxy.com/p/14219.html

上一篇: How to improve jqPlot parseOptions/jquery.extend performance

下一篇: running tests against a json string python