我目前必须在8000 - 32000点附近绘图(4行* 8000点)我通过JSON请求获取我的数据,并且实际上数据在不到一秒的时间内返回给我。然而,每当我到达$ .plot点时,它就会冻结IE8,并且需要永远加载那么多点。这是我的代码:
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吗?
非常感谢!
答案 0 :(得分:4)
你看到'冻结',因为Flot不支持增量绘图;它会在将控制权交还给浏览器之前呈现整个绘图。除了黑客攻击代码之外没有别的办法,但是你可以做两件事来帮助:
你可能正在使用Excanvas;尝试切换到Flashcanvas。根据我的经验,它与Flot的效果相同,并且可以提供更好的性能。许可'pro'版本所需的31美元不会打破大部分预算。
每行有8000个点,大多数显示最大宽度为1920像素,平均值更像是1280.如果你显示整行,没有某种缩放/平移,那么你'渲染数据的数量是屏幕上实际可见数量的4-6倍。一些服务器端过滤/聚合将点数降低到2k将大大提高性能。
但无论你做什么,你都无法在拥有大型数据集的IE8上获得出色的表现。这是一款差不多有四年历史的浏览器,在JavaScript性能大战之前发布,使用模拟画布;你只能这么做。