`
奥义之舞
  • 浏览: 284470 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HighCharts & AJAX 绘制图表

阅读更多
   最近在做一个监控系统,需要制作两个图形,一个度盘,一个波形图,最先开始使用了JFreeChart绘制图形,但是在服务器端绘制图形鸭梨很大,占用带宽多,浏览图形不畅快,抛弃之。
    然后觉得可以使用Java Applet在客户端绘制图形,但是这个要求JRE环境,于是也被无情的抛弃了。
    然后在网上找了会,发现一个HighCharts类库,一个JQuery插件,使用这个绘制出来的图形挺好看的,效果也令人满意,但是目前跟AJAX结合之后,highcharts制造出来的内存一直没有删除,PF使用率以每秒3MB的速度网上猛涨,令人大感鸭梨、、、(波形图现在困到这一个内存问题了)
   最后的度盘,在刚开始采用的Highcharts画的饼图,弄的一块一块的 效果也差,所以在GOOGLE了把JS绘图技术,搜出了 令我大感兴奋的矢量绘图技术,SVG AND VML,SVG支持除IE外大部分的浏览器,VML仅支持IE5以上的浏览器器,所以采用了SVG+VML结合在浏览器中绘图,图形不错,最后结合AJAX也没有发现内存问题。
   所以现在在这想跟大家讨论一下HighCharts的使用、、请各位发表意见
  这个是HIghcharts绘制图形的基本步骤,现在还没有填充数据
waveLineImage = {
    chart: { 
        renderTo: 'waveImage',    //绘制到DIV容器中,根据ID
        defaultSeriesType: 'line',   //绘制类型 目前是曲线
        plotBorderWidth: 1,
        plotBorderColor: '#99CC99',
        marginRight: 12,
        showAxes: true
    },
    title: {
        text: '',
        x: -20 //center
    },
    xAxis: {
        tickWidth: 0,
        tickInterval: 5,
        gridLineWidth: 1,
        gridLineColor: '#99CC99',
        categories: []
    },
    yAxis: {
        title: {
            text: ''
        },
        min: -1,
        tickInterval: 5,
        gridLineWidth: 1,
        gridLineColor: '#99CC99'
    },
    plotOptions: {
        series: {
            animation: false,
            marker: {
                enabled: false
            }
        }
    },
    tooltip: {
    	enabled:false,
        formatter: function(){
            return null;
        }
    },
    legend: {
        enabled: false
    },
    exporting: {
        enabled: false
    },
    series: [{
        name: "monitor",
        data: []
    }, {
        name: "temp",
        data: []
    }]
}


下面是传输数据,到highcharts当中
maxSize = 0;
lastSize = -1;
var tempArray = null;

function drawOscillogram(waveData){
    if (waveData) {   //传输过来的JSON数据
        var dataArray = new Array();
        var array = null, point = null, num = null,item = null;
		var waveDataLength = waveData.length;
        for (var i = 0; i < waveDataLength; i++) {
            array = waveData[i].split(",");
            point = 1 / array.length;
            for (var j = 0; j < array.length; j++) {
                num = i + Math.round((point * j) * 10) / 10;
                item = parseFloat(array[j]);
                if(maxSize<item) maxSize=item;
                dataArray.push([num, item]);
                num = null;
            }
            array = null;  item = null;  point = null;
        }
        
        if (waveDataLength < 60) {   //当不足60个点时,创建一个临时的数据,绑定到temp当中
            if (tempArray == null) {
                tempArray = new Array();
                for (var i = 0; i < 61; i++) {
                    tempArray.push([i, -6]);
                }
            }
			if(!waveLineImage.series[1])  waveLineImage.addSeries("",true,false);
            waveLineImage.series[1].data = tempArray;
        }
        else {
            tempArray = null;
            waveLineImage.series[1].remove();
        }
        waveLineImage.series[0].data = dataArray;    
		dataArray = null; waveDataLength = null;
		if(lastSize!=maxSize)
		{
			
			lastSize=maxSize;
		}else{
			waveLineImage.redraw();             //重新绘制HighCharts图形,但是这个好像不能生成轴
		 }
       new Highcharts.Chart(waveLineImage);         //绘制HIghcharts图形
    }
}


谁能看一下是哪点的内存溢出了,或者谁用过HighCharts绘制图表,看看在哪重新绘制图形内存量增长的少些、、


最后解决办法:
现在画的波形图也就是折线图也是用的JS+VML绘制的,基本上CPU也就每次都是3%左右,多的时候10%,内存也不增长。。。
解决办法:
1、AJAX把初始化请求的部分提出来,别每一次请求都调用
2、VML有个专门的绘制折线图的类型,使用这个 polyline
3、最好把不用的内存都释放掉,别每次都生成了而没有释放
分享到:
评论
4 楼 Songjun37 2011-04-22  
奥义之舞 写道
奥义之舞 写道
Songjun37 写道
HighCharts java导出 你做过吗?

没有 我做的 没有这个需求,不过 导出 只要 导入 那个导出的JS类就over了这个好像必须到Highcharts官网转上一圈才能导出


那个是你要连接外网的啊,如果网络条件限制呢?
3 楼 奥义之舞 2011-04-21  
奥义之舞 写道
Songjun37 写道
HighCharts java导出 你做过吗?

没有 我做的 没有这个需求,不过 导出 只要 导入 那个导出的JS类就over了这个好像必须到Highcharts官网转上一圈才能导出

2 楼 奥义之舞 2011-04-21  
Songjun37 写道
HighCharts java导出 你做过吗?

没有 我做的 没有这个需求,不过 导出 只要 导入 那个导出的JS类就over了
1 楼 Songjun37 2011-04-21  
HighCharts java导出 你做过吗?

相关推荐

    Highcharts AJAX后台JAVA JSON 曲线报表完美可运行例子 不包含官方JS 自己下载

    1. Highcharts:JavaScript图表库,用于在网页上绘制各种图表。 2. AJAX:前端向后端异步请求数据的技术,使得页面无刷新更新成为可能。 3. JSON:轻量级的数据交换格式,方便前后端数据传输。 4. Java后端:处理...

    网页图表Highcharts实践教程基础篇

    学习《网页图表Highcharts实践教程基础篇》不仅可以掌握基本的图表绘制,还能深入理解Highcharts的各种配置和交互特性,从而在实际项目中灵活运用,创建出符合需求的数据可视化解决方案。通过阅读提供的PDF教程和...

    highcharts异步ajax可直接运行实例(java版)

    在这个实例中,Highcharts是前端图表展示的工具,它通过JavaScript API接收来自后端的数据,并绘制出线性图。线性图是一种常见的图表类型,用于表示数值之间的关系,如趋势、比较等。Highcharts支持多种图表类型,如...

    Echarts和Highcharts制作图表

    4. **图表渲染**:根据更新后的配置,Echarts或Highcharts重新绘制图表。 综上所述,Echarts和Highcharts都是强大的数据可视化工具,各有优势,可以根据项目需求选择使用。集成它们到Spring框架可以简化前后端交互...

    EasyUI图表插件Highcharts源码Demo(Java)

    Highcharts是一款功能强大的JavaScript图表库,它用于在Web页面上绘制交互式的柱状图、折线图、饼图等各种图表。在Java开发中,我们通常会结合EasyUI框架来使用Highcharts,因为EasyUI提供了丰富的组件和易于使用的...

    Ajax.图表生成Ajax.图表生成

    同时,也需要一个图表库,如Highcharts、ECharts、D3.js等,这些库能根据接收到的数据绘制出各种类型的图表,如柱状图、折线图、饼图、散点图等。 以下是一个简单的Ajax图表生成的步骤: 1. **数据请求**:使用...

    jsp中ajax请求生成highcharts 的案例

    在IT行业中,JavaScript库Highcharts是一个非常流行的图表绘制工具,它允许开发者轻松地创建各种交互式的图表,如柱状图、折线图、饼图等。JSP(JavaServer Pages)是Java的一种Web开发技术,常用于动态网页的生成。...

    Highcharts实现图形报表

    1. **highcharts.js**:这是Highcharts的核心库,包含了所有图表绘制的功能。 2. **highcharts-more.js**(可选):此文件扩展了Highcharts的基本功能,包含了一些高级图表类型,如桑基图、水印图等。如果项目中需要...

    Java和Highcharts实现折线图

    这段代码首先通过Ajax请求获取Java后端返回的JSON数据,然后解析这些数据,设置Highcharts的配置项,最后创建图表。 在实际应用中,你可能需要对数据进行一些预处理,比如日期的格式化,或者根据业务需求调整图表的...

    unigui_highcharts_Demo

    而Highcharts则是一个流行的JavaScript图表库,用于在网页上绘制交互式的图表。 Unigui的核心特性在于其组件化的设计,开发者可以通过拖放组件的方式快速搭建用户界面,这些组件包括按钮、文本框、表格等常见的UI...

    HighCharts示例图

    9. **地图图表**:HighCharts不仅限于平面图表,还提供了绘制地理地图的功能,可以显示区域数据,适用于展示地理位置相关的统计信息。 10. **API与插件**:HighCharts拥有强大的API,可以方便地进行扩展和自定义。...

    highcharts加载多条曲线数据

    在这个例子中,文件`highcharts.js`是Highcharts的核心库,提供了绘制图表的所有功能;而`jquery-1.11.2.min.js`是jQuery库,它简化了DOM操作,使我们能更方便地与Highcharts交互。 创建一个图表的基本步骤如下: ...

    网页图表Highcharts实践教程基础篇.zip_javascript 教程_图表

    这可以通过AJAX请求实现,获取JSON或其他格式的数据后,将其转化为Highcharts所需的格式,并更新图表。 最后,要注意的是,虽然Highcharts对个人学习和非商业用途是免费的,但商业使用可能需要购买许可证。在使用前...

    highcharts快速生成百万数据点折线图.rar

    在实际应用中,还可以结合使用Highcharts的“redraw”事件,控制图表的绘制过程,避免不必要的重绘。当添加或更新数据时,可以暂停重绘,直到所有数据处理完毕再一次性更新,这样可以减少频繁的渲染操作。 为了...

    Highcharts-8.1.2.zip

    Highcharts 是一个用纯 JavaScript 编写的一个图表库, 能够很简单便捷的在 Web 网站或是 Web 应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。 Highcharts 支持的图表类型有直线...

    ajax动态获取数据渲染的charts图表

    "Ajax动态获取数据渲染的Charts图表"正是这种需求的一个实例,它利用Ajax技术从后台获取数据,并使用Highcharts库绘制出直观的图表。Highcharts是一个强大的JavaScript图表库,支持多种类型的图表,如柱状图、折线图...

    Highcharts-5.0.12.zip

    它通过HTML5 SVG技术绘制图表,因此在现代浏览器中表现良好,并且对移动设备友好。 2. **安装与引入**:下载Highcharts-5.0.12.zip后,解压得到所需的JavaScript文件,通常包括highcharts.js或minified的highcharts...

    Highcharts画折线图

    这个"Highcharts画折线图"的主题涉及到使用Highcharts来绘制动态、交互式的折线图,这对于数据可视化和数据分析来说是非常重要的。下面将详细介绍如何利用Highcharts库创建折线图以及相关的知识点。 1. **...

    highcharts.7z drawPicture

    在这个"highcharts.7z drawPicture"的压缩包中,很可能包含了作者对Highcharts使用的一些实例代码和经验总结,特别是关于动态获取数据并绘制图表的部分。 首先,我们要理解Highcharts的基本用法。Highcharts通过...

    Highcharts2.2.1

    Highcharts还支持丰富的插件,这些插件可以扩展其核心功能,比如数据列的动态加载、地图绘制、工具提示增强等。这些插件让开发者能够定制更复杂、更个性化的图表,满足不同项目的需求。 在实际应用中,使用...

Global site tag (gtag.js) - Google Analytics