2012-09-26 41 views
2

我目前必须在8000 - 32000点(4行* 8000点)附近绘制我通过JSON请求获取我的数据,并且实际上完美地将数据返回给我不到一秒钟。但是,无论何时我到达$ .plot点,它都会冻结IE8,并且需要永久加载多个点。这里是我的代码:jquery flot缓慢冻结IE

var data = []; 

     function onDataReceived(seriesData) { 
      var p = $.plot(placeholder, seriesData.seriesData, options); 
     } 
     $.ajax({ 
      url: '/Charts/LineChart?DataTypesToGraph=' + dataTypes + '&DatePull=' + chartDate + '&AssetID=' + $('#AssetID').val(), 
      method: 'GET', 
      async: true, 
      cache: true, 
      dataType: 'json', 
      success: onDataReceived 
     }); 

如何加快我的$ .plot使其加载速度快得多。也有一种方法可以做到这一点,所以它不冻结IE8?

非常感谢!

回答

4

您看到'冻结',因为Flot尚未支持增量绘图;在将控制权交还给浏览器之前,它呈现整个绘图。有周围没办法,除了黑客的代码,但有两件事情可以做,以帮助:

  1. 你可能会使用Excanvas;尝试切换到Flashcanvas。根据我的经验,它和Flot一样好,并且性能显着提升。许可“专业版”所需的31美元不会打破大多数预算。

  2. 每行有8000个点,大多数显示最大宽度为1920像素,平均值更像1280.如果您显示整条线,没有某种缩放/平移,重新渲染比实际在屏幕上可见的数据多4-6倍的数据。某些服务器端过滤/聚合可将点数降至2k,这将显着提高性能。

但无论你做什么,你都永远不会在IE8上用大数据集获得很好的性能。这是一个将近四年的浏览器,在JavaScript性能之战之前发布,使用模拟画布;你只能这么做。