jqPlot是一个十分强大、功能丰富的图表插件,能够显示走势图、柱形图等常用的图表类型,相信国内用的人很多。
大家在使用jqPlot动态更新图表时,也许会碰到过在IE中出现内存溢出的问题,下面我们来看看集中动态更新jqPlot图表的方式:
方式一:通过重建图表实现动态显示。
var series = [{'test'}];
var axes = {
xaxis : {
renderer : $.jqplot.CategoryAxisRenderer,
ticks : []
},
yaxis : {
min : 0,
max : 10,
tickInterval : 2
}
};
var plotConfig = createBarChartOptions(axes, series);
resizeGlobalMonitorChartContainer(containerId);
var plot = $.jqplot(g_channelDivId, chartData, plotConfig);
实际上我们通过重复的创建图表,确实可以实现动态更新,不过在IE下,我们会发现内存增长很厉害,起初,通过尝试在重新创建图表时,提前销毁旧的图表来释放内存:
/**
* 将plot图表从容器中销毁。
*
* @param containerId
* 容器ID。
* @param plot
* 在容器中的图表。
*/
function releasePlotChart(containerId, plot) {
if (plot) {
plot.destroy();
var elementId = '#' + containerId;
$(elementId).unbind(); // for iexplorer
$(elementId).empty();
plot = null;
}
}
当我们观察内存变化的时候,会发现销毁图表时内存减少了,但是重建之后,内存会比原来多出一些,一定时间以后,内存就会不断的增加,最后导致内存溢出。
方式二:通过动态数据加载,重绘实现。
/**
* 重绘plot图表。
*
* @param containerId
* 容器ID。
* @param chartData
* 图表数据。
* @param plotConfig
* 图表配置信息。
* @returns 返回重绘后的图表对象。
*/
function replotChart(plot, chartData) {
setChartDataToPlot(plot, chartData);
plot.replot({
resetAxes : true
});
return plot;
}
/**
* 将最新的数据设置到plot图表中。
*
* @param plot
* @param chartData
*/
function setChartDataToPlot(plot, chartData) {
for ( var i = 0; i < plot.series.length; i++) {
for ( var j = 0; j < plot.series[i].data.length; j++) {
try {
plot.series[i].data[j][1] = chartData[i][j];
} catch (e) {
}
}
}
}
通过运用这种方式,再次观察内存变化,会发现内存溢出问题已经不存在了。
从中我们发现,只要重建Plot图表,内存就会出现递增的现象,因此,当我们需要切换图表的时候,最好将原来的图表隐藏起来,当再次需要显示的时候,再恢复显示,从而避免重复创建图表,从而导致内存溢出。
分享到:
相关推荐
java 使用 poi 解析导入大数据量(几万数据量+)时,报出OOM。这是使用POI 第二种处理方法,解决大数据量导入内存溢出问题,并提升效率
根据这个设计方案,做了详细的实现,经项目验证,Excel文件20W条数据不成问题,因为Excel解析是我自己原创的行级处理器,不会一次性生成很多对象,因此不存在内存溢出现象,只要excel文件放得下,有多少记录都没问题...
Android防止内存溢出浅析.zip
java解决大批量数据导出Excel产生内存溢出的方案
解决大批量数据导出Excel产生内存溢出的方案
防止内存溢出浅析
android加载大图片的时候防止内存溢出的分析
一个POI导出Excel万级数据分页实现 解决内存溢出问题 完整的 project demo 有数据库dmp文件
内存溢出问题是参加kaggle比赛或者做大数据量实验的第一个拦路虎。 以前做的练手小项目导致新手产生一个惯性思维——读取训练集图片的时候把所有图读到内存中,然后分批训练。 其实这是有问题的,很容易导致OOM。...
绝对原创,这是我在项目中解决大数据Excel导入时内存溢出问题而编写的Excel行级解析器。同时支持Excel-2003和Excel-2007,excel-2003解析采用poi的eventusermodel模式实现,2007采用xmlreader实现,经项目验证,...
Android防止内存溢出浅析
内存溢出配置,内存溢出配置内存溢出配置内存溢出配置
我们经常会使用phpExcel导入或导入xls文件,但是如果一次导出数据比较大就会出现内存溢出错误,下面我来总结解决办法
有的时候,我们需要一次查询很多的数据,或者是说每次查询的数据量都很大,都有可能早晨内存溢出的情况,所以我们今天分别针对三个数据库来探讨如何避免这一问题。
易语言防止文件内存溢出源码,防止文件内存溢出,读入子程序
OOM全称”Out Of Memory”,即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出...
软件开发 数据库 内存泄露 内存溢出
易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出源码.rar 易语言源码易语言防止文件内存溢出...
JAVA内存溢出问题总结
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...